private void ListBox_1_OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
ListBoxItem myListBoxItem = (ListBoxItem)ListBox_1.ItemContainerGenerator.ContainerFromItem(ListBox_1.SelectedItem);
List<Button> btnList = FindVisualChild<Button>(myListBoxItem);
foreach (var item in btnList)
{
item.Content = "777";
}
}
效果就是双击哪个item哪个item中的button从666变成了777。
我们通过父控件找到了里面的子控件button,我们便可以对它进行任何操作(和用名字找到是一样的)。
以上关于可视化树的代码可以应用于ListBox,DataGrid,ListView,TreeView,对于“.ItemContainerGenerator.ContainerFromItem”这段代码的含义我暂时不是很理解,欢迎指教和交流。
通过以上的例子相信读者已经可以使用可视化树找到相应的控件了,但在我的开发过程中曾遇到过一些问题,和对于使用可视化树的一点小建议。
1.如果你在使用可视化树执行“ListBoxItem myListBoxItem = (ListBoxItem)ListBox_1.ItemContainerGenerator.ContainerFromItem(ListBox_1.SelectedItem);”这句返回值是空(实际上不是空),可能是因为界面没有初始化完毕,我的理解是,在前台这个控件还没生成完毕,或者是你修改了值但前台还没有修改,可以加上这句:
控件名.UpdateLayout();
之后在使用可视化树,这一条的说法和形容可能有点不严谨,欢迎指正交流。











