2010-01-18 45 views
0

我使用以下方法通過XML文檔循環創建TreeViewWPF的TreeViewItem

但是,如果選擇了任何TreeViewItem,則層次結構中的所有節點都將獲取事件觸發器,而不僅僅是所選的TreeViewItem

例如假設我們選擇節點的孫子。包括孫子,孩子,父母在內的所有節點都觸發相同的事件。

在我們預期只有孫子觸發相關的事件,而與事件應該被調用一次,但它結束了被稱爲3次所選項目的層次結構中的所有節點等字樣。

下面是代碼:

TreeViewItem getTreeViewItemWithHeader(XmlNode node) 
{ 
    TreeViewItem tvi = new TreeViewItem(); 
    tvi.Header = node.Name;//hdr; 
    tvi.Tag = node.Attributes["Tag"].Value; 
    tvi.PreviewMouseLeftButtonDown += new MouseButtonEventHandler(tvi_PreviewMouseLeftButtonDown); 
    tvi.Selected += new RoutedEventHandler(tvi_Selected); 

    return tvi; 

} 

請讓我知道如果您有任何建議,感謝

ň

回答

2

這是正常工作。 PreviewMouseLeftButtonDown事件是一個路由事件(在這種情況下策略是隧道)。這意味着可視化樹的根首先得到事件,並且它直到達到最初觸發事件的控制。該MouseLeftButtonDownSelected事件也排到,但其戰略冒泡 - 這意味着事件的工作它的方式可視化樹,從觸發事件的控制。

如果您想要不繼續發送路由事件,請將RoutedEventArgsHandled屬性設置爲傳入true

+0

感謝安迪。我會測試並將其標記爲答案。 謝謝。 – 2010-01-18 12:55:01