0

TreeView (System.Windows.Controls.TreeView) の WPF バージョンを使用しており、いくつかのイベントを割り当てる必要があります。これらはWPFであるため、ほとんどのイベントは異なるか、異なる方法で動作するため、AfterExpandが利用できないため混乱しています

今のところ、2 つのイベントが必要です。

TreeView レベルにある SelectedItemChanged TreeViewItem レベルにある ExpandedEvent

これまでのところ、

    private void DisplayGetEventTypes(UXEvent.GetEventTypesResp resp, CustomAsyncStateContainer state)
    {

        navBarControl.Groups.Clear();

        if (resp.eventTypeItems != null)
        {
            UXEvent.EventType[] eventItems = resp.eventTypeItems;

            int nodeCount = eventItems.Length;
            for (int i = 0; i < nodeCount; i++)
            {
                UXEvent.TryEvent eventItem = new UXEvent.TryEvent();
                eventItem.eventName = eventItems[i].name;
                eventItem.eventId = eventItems[i].id;

                NavBarGroup group1 = new NavBarGroup();

                group1.Header = eventItems[i].name;
                group1.Tag = eventItem;

                group1.IsExpanded = false;

                //Add dummy treeview to fill later if expanded
                System.Windows.Controls.TreeView treeview = new System.Windows.Controls.TreeView();
                treeview.SelectedItemChanged += new RoutedPropertyChangedEventHandler<object>(myTreeView_SelectedItemChanged);
                AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(myTreeView_ItemExpanded));
                group1.Content = treeview;
                group1.DisplaySource = DisplaySource.Content;

                navBarControl.Groups.Add(group1);

            }

        }
    }

テスト用の次の 2 つのドラフト イベント ハンドラー

    void myTreeView_SelectedItemChanged(object sender,
    RoutedPropertyChangedEventArgs<object> e)
    {
        // Set the data context of the text block to the selected value.
        var node = (ItemsControl)e.OriginalSource;
        System.Windows.Forms.MessageBox.Show("Selected!");

    }

    void myTreeView_ItemExpanded(object sender, RoutedEventArgs e)
    {
        // Set the data context of the text block to the selected value.
        var node = (TreeViewItem)e.OriginalSource;

        System.Windows.Forms.MessageBox.Show("Opening! - " + node.Header);

    }

私が抱えている問題はmyTreeView_ItemExpanded、treeviewItem が展開されたときに複数回発生することです。イベントのバブリングにより、複数回発火すると思います。

まず、この動作について読むことができるいくつかの優れたリソースを誰かに教えてもらえますか?

AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(myTreeView_ItemExpanded));次に、単一のイベントのみを作成するようにコードを修正するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

私は問題を見つけました。この線

AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(myTreeView_ItemExpanded));

読むべき

treeview.AddHandler(TreeViewItem.ExpandedEvent, new RoutedEventHandler(myTreeView_ItemExpanded));

最初の行で、使用可能なすべてのコントロールにイベント ハンドラーを追加し、イベントがトリガーされたときにすべてのコントロールを起動する必要があると思います。

于 2012-08-26T17:16:54.393 に答える