C# WPF 父控件通过使用可视化树找到子控件的示例代码

2020-01-05 09:13:22王冬梅

C#,WPF,父控件,可视化树,子控件,代码


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();

之后在使用可视化树,这一条的说法和形容可能有点不严谨,欢迎指正交流。