2009-09-07 20 views
13

我想在我的樹形視圖中獲取任何展開樹形視圖事件的事件。樹形視圖中任何項目的OnExpanded事件

原因是這樣,與原始問題有點無關: 我正在創建一個與xml文件樹緊密相關的樹,但我允許在xml中包含一個元素,因此樹可以跨越多個文件。我想在擴展時在我的樹視圖中設置treeviewitems的itemssource屬性。

回答

27

可以使用TreeViewItem.Expanded事件作爲附加事件:

<TreeView TreeViewItem.Expanded="TreeViewItem_Expanded" 
      ItemsSource="{Binding}"> 
    ... 
</TreeView/> 

在代碼隱藏,您可以識別發起使用OriginalSource財產的事件TreeViewItem

private void TreeViewItem_Expanded(object sender, RoutedEventArgs e) 
    { 
     TreeViewItem tvi = e.OriginalSource as TreeViewItem; 
     if (tvi != null) 
     { 
      MessageBox.Show(string.Format("TreeNode '{0}' was expanded", tvi.Header)); 
     } 
    } 
+0

如果你的意思是可視化的後代,你可以通過TreeViewItem的ItemsContainerGenerator獲取它們 – 2009-09-07 22:42:42

+0

這非常有幫助,謝謝,我希望有一個獎勵給你。最後總結:我想要的視覺後代在擴展事件期間還沒有創建。在擴展事件中,我保存了OriginalSource,然後在一個綁定的任意轉換器方法中,我得到了ItemContainerGenerator.ContainerFromIndex(i)的可視後代並更新了ItemsSource。 – 2009-09-08 00:13:16