原理是:spa
由于是双击事件,也就是同时引起了选择事件,TreeViewItem的IsSelected为True.经过触发器设置某个属性为特殊值,而后在CS页面的双击事件方法内判断是否此值便可。code
xaml代码:blog
<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代码事件
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
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);
}
}
原截图get
如今的效果class
*******************************************原理
虽然经过其余方法避免的屡次重复,可是为何会触发,以及是否还有其余解决办法暂时是不知道了。object
看样子仍是须要仔细查看资料和查看源代码了。方法
不得不说这个真的是好问题啊。im
我本来觉得使用AddHandler方法会阻止传播,可是并无效果(苦笑)。