我使用以下方法通过XML文档循环创建TreeView

然而,当任何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;

}

请让我知道如果您有任何建议,谢谢

<磷>氮

有帮助吗?

解决方案

此工作正常。该PreviewMouseLeftButtonDown事件是路由事件(在这种情况下,策略是隧道)。这意味着视觉树的根首先获取事件,和它的作品的方式,直到它到达最初触发事件的控制。该MouseLeftButtonDownSelected事件也排到,但其策略冒泡 - 这意味着事件的工作它的方式可视化树,从触发事件控制

如果你想有一个路由事件不继续被发送,设定中Handled通过RoutedEventArgstrue财产。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top