Wpf- Comment puis-je obtenir le TreeViewItem qui a déclenché l'événement TreeViewItem.Loaded?
-
02-10-2019 - |
Question
Je suis en train d'attacher des gestionnaires à chaque TreeViewItem
car ils sont chargés, puis retirez les gestionnaires qu'ils sont déchargés.
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));
}
Modifier
Je ne peux toujours pas comprendre ce qui se passe. Il semble juste être ramasser l'événement chargé de TreeView
au lieu de l'événement chargé de TreeViewItem
.
La solution 2
Apparemment, l'événement est un événement TreeViewItem.Loaded direct. Donc, il n'y a aucun moyen d'accomplir ce que je cherchais.
Autres conseils
Loaded est un événement routé, vous trouverez sa source dans la propriété OriginalSource
, qui devrait être le TreeViewItem qui a déclenché l'événement.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow