TreeView.ItemContainerGenerator.ContainerFromItem为非根项目返回null。 解决方法?

在下面的示例中,当我选择“String”时,窗口的标题变为“null”。 但我必须获得“String”的容器。 具体来说,我想做相当于SelectedItem = null (但该属性只读取TreeView ,所以我试图到容器将其IsSelected设置为false )。 该怎么办?

     String                

 namespace WpfApplication1 { public partial class Window1 : Window { public Window1() { InitializeComponent(); } private void Handler(object sender, EventArgs e) { var treeView = sender as TreeView; var container = treeView.ItemContainerGenerator.ContainerFromItem(treeView.SelectedItem); Title = container != null ? container.ToString() : "null"; } } } 

问题是每个TreeViewItem本身就是一个ItemsControl所以他们每个人都为自己的孩子管理自己的容器。

但是,有一种非常简单的方法可以执行您想要执行的操作:不是注册到SelectedItemChanged事件,而是注册到TreeViewItem.Selected事件,该事件将使用设置为所选TreeViewItemOriginalSource冒泡。

XAML:

  

代码背后:

 private void TreeViewItem_Selected(object sender, RoutedEventArgs e) { TreeViewItem container = (TreeViewItem) e.OriginalSource; Title = container != null ? container.ToString() : "null"; }