WPF- كيف يمكنني الحصول على TreeViewItem الذي أدى إلى حدث TreeViewitem.loaded؟

StackOverflow https://stackoverflow.com/questions/3597720

  •  02-10-2019
  •  | 
  •  

سؤال

أحاول إرفاق بعض المعالجات بكل منهما 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.loaded هو حدث مباشر. لذلك لا توجد طريقة لإنجاز ما كنت أحاول.

نصائح أخرى

تم تحميله هو حدث موجه ، لذلك ستجد مصدره في OriginalSource الخاصية ، والتي يجب أن تكون treeviewitem التي أثارت الحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top