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
事件,该事件将使用设置为所选TreeViewItem
的OriginalSource
冒泡。
XAML:
代码背后:
private void TreeViewItem_Selected(object sender, RoutedEventArgs e) { TreeViewItem container = (TreeViewItem) e.OriginalSource; Title = container != null ? container.ToString() : "null"; }