我在三层深度TreeView中有一个非常奇怪的错误。这是间歇性的,我无法找到如何一致地再现它。以编程方式删除,添加然后删除一些第三级项目,当我单击根项目时,它未被选中。它仍然可以展开/折叠,但无法通过鼠标单击进行选择,并且它不会触发ItemSelectionChange事件。您可以单击以选择第二级或第三级项目,然后您最终可以选择根项目。我已经尝试在删除后为所有项目设置IsSelected = false并尝试在删除项目时进行良好的清理,但它没有帮助。有没有人遇到那个bug?你有什么建议去除这个bug吗?
答案 0 :(得分:0)
以编程方式将IsSelected设置为节点后发生在我身上。然后我无法单击以选择上一个节点。
[编辑]
终于弄清楚发生了什么。似乎设置IsSelected属性是不够的,因为树内部逻辑焦点保留在旧的选定元素上。
事件被发送到树项目,但因为它已经在内部具有逻辑焦点,所以它没有触发焦点更改(我怀疑树知道何时更改所选项目)。
如果我将焦点调用到我将IsSelected设置为true的树节点上,那么它可以正常工作。
====================
对于新添加的元素,您是否将IsSelected设置为true?如果是这样,也要做一个焦点,如下:
DependencyObject nodeVisualContainer = mTreeControl.ItemContainerGenerator.ContainerFromItem(nodeToSelect);
if (nodeVisualContainer is UIElement)
((UIElement)nodeVisualContainer).Focus();
注意:这只是对元素的逻辑关注。键盘焦点不会受到影响。