Wpf-如何获取触发TreeViewItem.Loaded事件的TreeViewItem?

时间:2010-08-30 03:42:05

标签: c# wpf treeview treeviewitem

我正在尝试在加载时为每个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 个答案:

答案 0 :(得分:0)

Loaded是一个路由事件,因此您可以在OriginalSource属性中找到它的源代码,该属性应该是触发事件的treeviewitem。

答案 1 :(得分:0)

显然,TreeViewItem.Loaded事件是一个直接事件。所以没有办法完成我的尝试。