0

我试图在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加载的事件。

4

2 回答 2

0

Loaded是一个路由事件,所以你会在OriginalSource属性中找到它的来源,应该是触发事件的treeviewitem。

于 2010-08-30T06:52:41.807 回答
0

显然 TreeViewItem.Loaded 事件是直接事件。所以没有办法完成我正在尝试的事情。

于 2010-10-07T01:54:39.617 回答