WPF- Как я могу получить TreeViewItem, который вызвал событие TreeviewItem.loaded?

StackOverflow https://stackoverflow.com/questions/3597720

  •  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 Собственность, которое должно быть дерево, которое вызвало событие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top