因此,我创建了一个 TreeViewItem (parentNode),并将 TreeViewItems 添加到 parentNode TreeViewItem 中。然后,我将 MouseButtonEventHandler 添加到 parentNode,现在 parentNode 中的所有 TreeViewItems 都有 MouseButtonEventHandler。我已经运行了调试器以查看我是否有意外编写的代码来添加鼠标按钮处理程序,但没有......
编辑:我做了额外的测试,它甚至下降了两个级别。有没有办法将事件处理程序仅隔离到特定节点,而不隔离其子节点和/或父节点?
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();
}
父节点的区域包括子节点的区域。想想重叠的矩形。如果只想单击以处理文本部分,则必须提供自己的 DataTemplate,或使用可视化树查找标题并对其应用单击。