我正在使用以下方法创建TreeView
,循环遍历xml文档。
但是,当选择任何TreeViewItem
时,层次结构中的所有节点都会获取事件触发器,而不仅仅是选定的TreeViewItem
。
例如,假设我们选择节点的孙子。包括孙子,孩子,父母在内的所有节点都触发相同的事件。
换句话说,我们只希望孙子触发相关事件,而事件应该只调用一次,但最终被调用所选项目层次结构的所有节点3次。
以下是代码:
TreeViewItem getTreeViewItemWithHeader(XmlNode node)
{
TreeViewItem tvi = new TreeViewItem();
tvi.Header = node.Name;//hdr;
tvi.Tag = node.Attributes["Tag"].Value;
tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown);
tvi.Selected += new RoutedEventHandler(tvi_Selected);
return tvi;
}
如果您有任何建议,请告诉我,谢谢
<磷>氮答案 0 :(得分:2)
这是正常的。 PreviewMouseLeftButtonDown
事件是路由事件(在这种情况下,策略是隧道)。这意味着可视化树的根首先获取事件,然后向下工作直到它到达最初触发事件的控件。 MouseLeftButtonDown
和Selected
事件也被路由,但它的策略是冒泡 - 这意味着事件在可视树中向上运行,从触发事件的控件开始。
如果您希望不再继续发送路由事件,请将传递的Handled
的{{1}}属性设置为RoutedEventArgs
。