2010-08-30 70 views
0

我想一些处理程序附加到每个TreeViewItem,因为他们被加载,然后删除处理,因为它们卸载。Wpf-如何获取触发TreeViewItem.Loaded事件的TreeViewItem?

下面是我在从TreeView继承我的定制控件的代码:

public ModdedTreeView() 
    { 
     this.AddHandler(TreeViewItem.LoadedEvent, new RoutedEventHandler(ItemLoaded));    

     this.AddHandler(TreeViewItem.UnloadedEvent, new RoutedEventHandler(ItemUnloaded)); 
    } 

    protected void ItemLoaded(object sender, RoutedEventArgs e) 
    { 
     TreeViewItem item = e.OriginalSource as TreeViewItem; 

     if (item == null) 
      return; 

     item.AddHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed)); 

     item.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(ItemExpanded)); 

     item.AddHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(ItemSelected)); 
    } 


    protected void ItemUnloaded(object sender, RoutedEventArgs e) 
    { 
     TreeViewItem item = e.OriginalSource as TreeViewItem; 

     if (item == null) 
      return; 

     item.RemoveHandler(TreeViewItem.CollapsedEvent, new RoutedEventHandler(ItemCollapsed)); 

     item.RemoveHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(ItemExpanded)); 

     item.RemoveHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(ItemSelected)); 
    } 

编辑:

我仍然无法弄清楚到底是怎么回事。它只是似乎是不用拿起TreeViewItem加载事件的TreeView加载事件。

回答

0

显然,TreeViewItem.Loaded事件是一个直接的事件。所以没有办法完成我所尝试的。

0

加载的是一个路由事件,所以你会发现它在OriginalSource属性,它应该是触发事件的树型视图源。

+0

我已经试过了。出于某种原因,OriginalSource始终是TreeView而不是TreeViewItem。 – Justin 2010-08-30 23:51:05