如何从代码后面访问堆栈面板中的控件?

时间:2012-07-04 11:23:40

标签: c# wpf listbox controls

这是在WPF的C#中:

我知道我可以像这样添加项目到堆栈面板:myStackPanel.Children.Add(new Button()); 或者像这样的ListBox:myListBox.Items.Add(new Button()); 当然,我可以事先编辑控件并在后面添加它们,比如首先设置属性然后添加它们。

但是,如果控件在堆栈布局中,并且后面有代码,我该怎么选择它。例如,有没有类似的方法:myStackPanel.Childern.CONTROL_AT_INDEX[n]?然后,我如何编辑它更像是更改标签的内容(如果它是标签)或事件处理程序(如果它是按钮)?

我也想要一个ListBox的解决方案。 我只是不知道如何在内部访问这些控件。

3 个答案:

答案 0 :(得分:4)

分配给该控件x:Name并在后面的代码中使用它。

这对模板样式中的控件自然无效。

答案 1 :(得分:1)

与Tigran已经发布的一样,可以在XAML中为控件指定一个属性:

<ListBox x:Name="myListBox"
         // more properties here...
/>

然后您的代码隐藏将能够编译您的行:

myListBox.Items.Add(new Button());

但是,我强烈建议您另外使用 MVVM 方法来摆脱代码隐藏文件。这减少了业务逻辑与UI的耦合。使用MVVM模式是Microsoft推荐的使用WPF的方式,因为它使得使用许多WPF功能非常容易。

可以在此SO线程中找到一个很好的教程资源,例如:MVVM: Tutorial from start to finish?

答案 2 :(得分:1)

这是我的解决方案

var child = (from c in theCanvas.Children
         where "someId".Equals(c.Tag)
         select c).First();