Domanda

Sto cercando di collegare alcuni gestori a ogni TreeViewItem come essi vengono caricati e quindi rimuovere i gestori di come vengono scaricati.

Ecco il codice che ho nel mio controllo personalizzato che eredita da 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));
    }

Modifica

Non riesco ancora a capire cosa sta succedendo. E 'solo sembra essere raccogliendo la TreeView caricato evento anziché l'TreeViewItem caricata evento.

È stato utile?

Soluzione 2

A quanto pare l'evento TreeViewItem.Loaded è un evento diretto. Quindi non v'è alcun modo per ottenere quello che stavo cercando.

Altri suggerimenti

Loaded è un evento indirizzato, in modo da trovare la sua fonte nella proprietà OriginalSource, che dovrebbe essere il TreeViewItem che ha attivato l'evento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top