为什么TreeViewItem中的项继承父级的事件处理程序?

时间:2012-07-04 19:41:08

标签: c# wpf event-handling treeviewitem

因此,我创建了一个TreeViewItem(parentNode),并将TreeViewItems添加到parentNode TreeViewItem中。然后我将一个MouseButtonEventHandler添加到parentNode,现在parentNode中的所有TreeViewItem都有MouseButtonEventHandler。我运行调试器,看看我是否有意外编写的代码来添加MouseButtonHandler,但是没有......

编辑:我做了额外的测试,甚至还有两个级别。有没有办法将事件处理程序仅隔离到特定节点而不是它的子节点和/或父节点?

public newClass() {
    TreeViewItem parent = new TreeViewItem();

    TreeViewItem childOne = new TreeviewItem();
    addExpandClickListener(childOne);

    TreeViewItem childTwo = new TreeviewItem();
    TreeViewItem childThree = new TreeViewItem();


    childTwo.Items.Add(childThree);
    childOne.Items.Add(childTwo);
    parent.Items.Add(childOne);
    TreeViewObject.Items.Add(parent);
}

private void addExpandClickListener(TreeViewItem item) { item.MouseLeftButtonUp += new MouseButtonEventHandler(item_MouseClick); }


private void item_MouseClick(object sender, MouseButtonEventArgs e) {
    // Define click event as handled
    e.Handled = true;
    if(sender != e.Source) return;
    // Handle click event
    TreeViewItem root = (TreeViewItem)sender;
    if(root.IsExpanded == true) CollapseRecursive(root);
    else root.IsExpanded = true;
    //else root.ExpandSubtree();
    ViewTree.Items.Refresh();
}

1 个答案:

答案 0 :(得分:2)

parentNode的区域包括子区域。想想重叠的矩形。如果您只想点击一下文本部分,那么您必须提供自己的DataTemplate或使用可视树来查找标题并将点击应用到该文章。