1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > WPF中的TreeView选中指定节点

WPF中的TreeView选中指定节点

时间:2023-11-09 16:35:30

相关推荐

WPF中的TreeView选中指定节点

WPF 中的 TreeView 选中 指定 节点

基本原理

TreeView节点一般包装了一个自定义的对象,这个对象包含ID、DisplayName等各类属性。我的一个项目里有TreeView加载后默认选中根节点,或者运行中后台指定选中某个节点的需求。比如对节点进行上移下移操作后,选中被操作的节点以优化视觉效果。

基本原理

1.TreeView由TreeViewItem构成,TreeViewItem封装了自定义的数据对象,这个TreeViewItem称为container。

2.要选中某个节点,必须通过这个节点的TreeViewItem.Focus()或者TreeViewItem.isSelected=true这两个方法之一来设置选中状态。

3.那么要通过已知的自定义对象的某个数据(比如Id或者DisplayName的)来设置对应节点选中,就必须获得封装这个自定义对象的TreeViewItem。

4.获得封装自定义对象的TreeViewItem,可以通过father_treeviewItem.ItemContainerGenerator.ContainerFromItem(node)来获得。

5.father_treeviewItem必须是要选中的自定义对象对应的节点 的 上一个父节点 的 TreeViewItem。

public void SelectNodeById(int i)//根据ID选中节点{//tv是TreeView对象实例化后的名称//depttreenode是自定义数据对象,对应一个节点的数据//i为自定义数据对象的id属性TreeViewItem tvi = tv.ItemContainerGenerator.ContainerFromItem(tv.Items[0]) as TreeViewItem;GoDeepFindNode(i, tvi);}public void GoDeepFindNode(int i,TreeViewItem t)//i为节点中自定义对象的属性ID{foreach (depttreenode node in t.Items){TreeViewItem tvi = t.ItemContainerGenerator.ContainerFromItem(node) as TreeViewItem;if (node.id == i){tvi.Focus();break;}else{GoDeepFindNode(i, tvi);}}}

需要注意的是:

1.上述代码需要在TreeView的loaded事件完成之后使用,loaded事件在vs中的提示是:“当对元素进行布局、呈现,且可将其用于交互时发生”。

2。如果在Loaded事件完成之前调用代码,containerFromItem会返回null。

3.如果想使用代码,有两种情况,要么在onload事件中调用,要么就在确定loaded事件已完成的情况下调用,比如已经能看到TreeView了,再调用。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。