原理是: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方法會阻止傳播,可是並無效果(苦笑)。