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プロパティにコンテキストメニューが張り付いているコントロールが設定されている。
メモしてみると当たり前なことに感じる。なかなか分からなかったのは、もっと簡単に取得できるはずだと考えたからかなあ。