0

我正在创建一个TreeView使用以下方法循环遍历 xml 文档的方法。

However when any TreeViewItemis selected all the nodes in the hierarchy are getting the event triggers instead of just the selected 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;

}

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

ñ

4

1 回答 1

2

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

如果您希望不再继续发送路由事件,请将传入的Handled属性设置为.RoutedEventArgstrue

于 2010-01-18T12:13:41.280 回答