1

wpfアプリケーションのコードビハインドで追加したいくつかのラベルコントロールのコンテキストメニュー内にComboBoxコントロールがあります。ページには、コンテキストメニューを持つ多くのラベルがあります。基本的に、このLABELにはContextMenuが含まれContextMenuにはComboboxが含まれているようなものです。ComboboxのSelectionChangedイベントで、どのラベルのコンテキストメニューのComboboxがこのイベントを生成したか知りたいですか?

4

1 に答える 1

3

ComboBoxはsender、イベントハンドラーの引数から取得できます。

Parent次に、ComboBoxのプロパティからContextMenuを取得できます。

そして最後PlacementTargetに、ContextMenuのプロパティからのラベル。

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);
    }
}
于 2012-11-01T08:28:52.120 に答える