我试图将一些处理程序附加到每个处理程序 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.Poaded事件是一个直接事件。因此,没有办法完成我的尝试。

其他提示

加载是一个路由事件,因此您将在 OriginalSource 属性,应该是触发事件的TreeViewItem。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top