メモの日々


2018年09月12日(水) [長年日記]

[c#] WPFのコンテキストメニューのイベントハンドラでターゲットのコントロールを得る

WPFにおいて、コンテキストメニューアイテムのクリックに対するイベントハンドラーにてそのコンテキストメニューが張り付いているコントロールを得る方法がなかなか分からなかったのでメモ。

コンテキストメニューのXAMLは次の通り。

<ContextMenu x:Key="contextMenu">
    <MenuItem Header="メニューです" Click="OnClick"/>
</ContextMenu>

OnClickイベントハンドラのシグネチャは次のようになる。

private void OnClick(object sender, RoutedEventArgs e)

OnClick()内で上のコンテキストメニューが張り付いているコントロールを得たい。senderから次のように辿れば目的のコントロールを取得できるようだ。

  • senderにはMenuItemオブジェクトが設定される。
  • MenuItemオブジェクトのParentプロパティにContextMenuオブジェクトが設定されている。
  • ContextMenuオブジェクトのPlacementTargetプロパティにコンテキストメニューが張り付いているコントロールが設定されている。

メモしてみると当たり前なことに感じる。なかなか分からなかったのは、もっと簡単に取得できるはずだと考えたからかなあ。