2012-11-01 23 views
1

我有一個組合框控件內的上下文菜單中的一些標籤控制,我已經添加在代碼後面的WPF應用程序。在頁面上有許多標籤具有上下文菜單。基本上它是這樣的LABEL包含ContextMenuContextMenu conntains Combobox。在Combobox的SelectionChanged事件中,我想知道哪個標籤的contextmenu的Combobox產生了這個事件?獲取Contextmenu的父級控制。 WPF應用程序

回答

2

您可以從事件處理程序中的sender參數中獲取ComboBox。

然後,您可以從ComboBox上的Parent屬性中獲取ContextMenu。

然後最後從ContextMenu上的PlacementTarget屬性標籤。

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     var label = new Label(); 
     label.Content = "Click me!"; 
     label.Name = "clickMe"; 
     this.Content = label; 

     var cmb = new ComboBox(); 
     cmb.Name = "combobox1"; 
     cmb.Items.Add("Test1"); 
     cmb.Items.Add("Test2"); 
     cmb.Items.Add("Test3"); 
     cmb.SelectionChanged += new SelectionChangedEventHandler(cmb_SelectionChanged); 

     var menu = new ContextMenu(); 
     menu.Name = "contextmenu"; 
     menu.Items.Add(cmb); 

     label.ContextMenu = menu; 
    } 

    private void cmb_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     var cmb = (ComboBox)sender; 
     var contextmenu = (ContextMenu)cmb.Parent; 
     var label = (Label)contextmenu.PlacementTarget; 

     MessageBox.Show("Combobox: " + cmb.Name + Environment.NewLine + 
         "Contextmenu: " + contextmenu.Name + Environment.NewLine + 
         "Label: " + label.Name); 
    } 
} 
+0

謝謝..彼得。工作得很好。 – SST

相關問題