2012-08-26 69 views
0

我正在使用WPF版本的TreeView(System.Windows.Controls.TreeView)並需要分配幾個事件。由於這是WPF的大部分事件是不同或以不同的方式表現,因此我的混亂AfterExpand不可TreeView事件不斷髮射

現在我需要2個事件:

SelectedItemChanged這是在TreeView的水平 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); 

      } 

     } 
    } 

和測試

以下兩個事件處理程序草案
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));只有一個事件?

謝謝

+0

基本上,你想要哪個事件只觸發一次? ItemExpanded或SelectedItemChanged? –

+0

是的,'myTreeView_ItemExpanded'會多次觸發,我只希望它觸發一次。 SelectedItemChanged工作正常。 – user3357963

回答

0

我發現了這個問題。該生產線

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

應該讀

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

我認爲第一行必須添加事件處理程序所有可用的控制,當事件觸發所有被解僱。