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

どうやら TreeViewItem.Loaded イベントは直接イベントです。したがって、私が試みていたことを達成する方法はありません。

于 2010-10-07T01:54:39.617 に答える
0

Loaded はルーティング イベントであるため、そのソースはOriginalSourceプロパティにあり、イベントをトリガーした treeviewitem である必要があります。

于 2010-08-30T06:52:41.807 に答える