wpf treeviewitem

时间:2010-01-18 11:23:21

标签: wpf treeview selected treeviewitem

我正在使用以下方法创建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;

}

如果您有任何建议,请告诉我,谢谢

<磷>氮

1 个答案:

答案 0 :(得分:2)

这是正常的。 PreviewMouseLeftButtonDown事件是路由事件(在这种情况下,策略是隧道)。这意味着可视化树的根首先获取事件,然后向下工作直到它到达最初触发事件的控件。 MouseLeftButtonDownSelected事件也被路由,但它的策略是冒泡 - 这意味着事件在可视树中向上运行,从触发事件的控件开始。

如果您希望不再继续发送路由事件,请将传递的Handled的{​​{1}}属性设置为RoutedEventArgs