TreeView中的ContainerFromItem经常用到,这里给出一个场景:
PreviewMouseDown事件判断将要选中的TreeViewItem是否和当前选中项相同,不同时需要执行一断逻辑判断,从而决定是否切换。
示例
树形控件显示可能多级,如下示例中的树形控件:
对于第一级,使用ContainerFromItem可以正确获取到相应的TreeViewItem。
对于第二级,则无法获取到。
解决方案
对于树形控件,每一个TreeViewItem下都有一个ItemsControl,要使用ContainerFromItem获取,只能使用其直接父元素获取,而不能全从根元素获取,StackOverFlow中的说明。
替代的解决方案,使用TreeViewItem的后台绑定数据判断是否为某一特定项,即使用
willSelectTreeViewItem.DataContext == st.SelectedItem
判断。