询问者
TreeViewItem的双击事件,会多次触发调用上级,直到最顶层,如何解决

问题
-
TreeViewItem的双击事件,会多次触发调用上级,直到最顶层。查阅了资料,似乎无法阻止向上级节点遍历,那怎么编写条件判断代码使第二次以后的事件触发,走向不调用业务代码的分支方向?
如果要实体类设计上做到,那TreeViewItem绑定的实体类要怎么设计。
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e) { TreeViewItem treeviewItem = sender as TreeViewItem; TreeNode tree= treeviewItem.DataContext as TreeNode; //下列代码在双击子节点时,避免在上级节点的事件触发中被运行?编写怎样的条件语句以及实体类要如何改变才能实现? MessageBox.Show(tree.toString()); } public class TreeNode { private ObservableCollection<TreeNode> _childNodes; public ObservableCollection<TreeNode> childNode { get { return _childNodeList; } set { _childNodeList = value; this.OnChanged(); } } }
- 已编辑 轮回的齿轮 2019年11月1日 6:21
全部回复
-
能给出类似代码?
- 已建议为答案 Snoring Cat 2019年11月3日 13:40
- 取消建议作为答案 Snoring Cat 2019年11月3日 13:40
-
真的是好问题啊。
我原本以为使用AddHandler方法会阻止传播。
treeviewItem.AddHandler(TreeViewItem.MouseDoubleClickEvent, (MouseButtonEventHandler)TreeViewItem_MouseDoubleClick, true);
但是,并没有效果。
说明,这个方法是同时引发?(猜测)这个看样子需要高手来回答了,我得查查资料了,看看源代码了。
不过,我使用了其他方法来阻止事件的重复。
原理是:
因为是双击事件,也就是同时引发了Select事件,TreeViewItem的IsSelected为True.通过触发器设置某个属性为特殊值,然后在CS页面的双击事件方法内判断是否此值即可。
xaml代码
<Grid> <TreeView> <TreeView.Resources> <Style TargetType="TreeViewItem"> <Style.Triggers> <Trigger Property="IsSelected" Value="true"> <Setter Property="BorderThickness" Value="1"/> </Trigger> </Style.Triggers> </Style> </TreeView.Resources> <TreeViewItem Header="AAAAA" MouseDoubleClick="TreeViewItem_MouseDoubleClick"> <TreeViewItem Header="bbbbb" MouseDoubleClick="TreeViewItem_MouseDoubleClick"> <TreeViewItem Header="ccc" MouseDoubleClick="TreeViewItem_MouseDoubleClick"/> </TreeViewItem> </TreeViewItem> </TreeView> </Grid>
CS代码:
TreeViewItem treeviewItem = sender as TreeViewItem; if (treeviewItem.BorderThickness == new Thickness(1)) { MessageBox.Show(treeviewItem.Header.ToString()); treeviewItem.IsSelected = false; //其他代码毫无作用 // e.Handled = true; //treeviewItem.AddHandler(TreeViewItem.MouseDoubleClickEvent, (MouseButtonEventHandler)TreeViewItem_MouseDoubleClick, true); }
截图
- 已编辑 ARM830 2019年11月3日 11:29