2010-08-30 23 views
0

J'essaye d'attacher quelques gestionnaires à chaque TreeViewItem pendant qu'ils sont chargés et enlèvent alors les gestionnaires comme ils sont déchargés.Wpf- Comment puis-je obtenir le TreeViewItem qui a déclenché l'événement TreeViewItem.Loaded?

Voici le code que j'ai dans mon contrôle personnalisé qui hérite de 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)); 
    } 

Edit:

Je ne peux toujours pas comprendre ce qui se passe. Il semble juste prendre l'événement chargé TreeView au lieu de l'événement chargé TreeViewItem.

Répondre

0

Apparemment, l'événement TreeViewItem.Loaded est un événement direct. Il n'y a donc aucun moyen d'accomplir ce que j'essayais.

0

Loaded est un événement routé, vous trouverez donc sa source dans la propriété OriginalSource, qui doit correspondre à l'arborescence qui a déclenché l'événement.

+0

J'ai essayé ça. Pour une raison quelconque, OriginalSource est toujours TreeView n'est pas un TreeViewItem. – Justin