WPF- Как я могу получить TreeViewItem, который вызвал событие TreeviewItem.loaded?
-
02-10-2019 - |
Вопрос
Я пытаюсь прикрепить некоторые обработчики к каждому 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));
}
Редактировать:
Я до сих пор не могу выяснить, что происходит. Это просто, кажется, собирает TreeView
загруженное событие вместо TreeViewItem
загруженное событие.
Решение 2
Видимо, TreeViewItem.loaded событие - это прямое событие. Так что нет способа достичь того, что я пытался.
Другие советы
Загружено - это маршрутное событие, поэтому вы найдете его источник в OriginalSource
Собственность, которое должно быть дерево, которое вызвало событие.
Не связан с StackOverflow