WPF- Wie kann ich die TreeViewItem bekommen, die das TreeViewItem.Loaded Ereignis ausgelöst?
-
02-10-2019 - |
Frage
Ich versuche, einige Handler jeden TreeViewItem
zu befestigen, wie sie geladen werden und dann die Handler entfernen, da sie entladen werden.
Hier ist der Code, den ich in meiner benutzerdefinierten Kontrolle haben, die erbt von 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:
Ich kann immer noch nicht herausfinden, was los ist. Es scheint nur die TreeView
geladen Ereignis statt des TreeViewItem
geladen Ereignis werden Aufnehmen.
Lösung 2
Anscheinend ist die TreeViewItem.Loaded Veranstaltung ist ein direktes Ereignis. So gibt es keine Möglichkeit, zu erreichen, was ich versuche.
Andere Tipps
Aufgebaut ist ein Routingereignis, so dass man seine Quelle in der OriginalSource
Eigenschaft finden, die den TreeViewItem sein sollten, die das Ereignis ausgelöst hat.