Wpf - Как я могу получить TreeViewItem, который вызвал событие TreeViewItem.Loaded? - PullRequest
0 голосов
/ 30 августа 2010

Я пытаюсь прикрепить некоторые обработчики к каждому 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));
    }

Edit:

Я до сих пор не могу понять, что происходит. Похоже, что он получает загруженное событие TreeView вместо загруженного события TreeViewItem.

Ответы [ 2 ]

0 голосов
/ 07 октября 2010

Очевидно, что событие TreeViewItem.Loaded является прямым событием.Так что нет способа выполнить то, что я пытался.

0 голосов
/ 30 августа 2010

Loaded является перенаправленным событием, поэтому вы найдете его источник в свойстве OriginalSource, которое должно быть элементом дерева, вызвавшим событие.

...