FrameworkElement.ContextMenuOpening FrameworkElement.ContextMenuOpening FrameworkElement.ContextMenuOpening FrameworkElement.ContextMenuOpening Event


要素のコンテキスト メニューが開くときに発生します。Occurs when any context menu on the element is opened.

 event System::Windows::Controls::ContextMenuEventHandler ^ ContextMenuOpening;
public event System.Windows.Controls.ContextMenuEventHandler ContextMenuOpening;
member this.ContextMenuOpening : System.Windows.Controls.ContextMenuEventHandler 
Public Custom Event ContextMenuOpening As ContextMenuEventHandler 


コンテキストメニューを手動で開くには、イベントのハンドラーが関連するイベントを処理済みとしてマークする必要があります。To manually open context menus, handlers of the events should mark the relevant event as handled. それ以外の場合は、 ContextMenuプロパティの既存の値を使用して、自動的にコンテキストメニューが開きます。Otherwise, the existing value of the ContextMenu property will be used to automatically open a context menu. イベントを処理済みとしてマークすると、既定のアクションが実質的にキャンセルされますContextMenu 。プロパティの値をリセットContextMenuし、新しいを開くことができます。Marking the event handled will effectively cancel the default action, and could be an opportunity to reset the value of the ContextMenu property and then open the new ContextMenu. ただし、タイミングの問題に注意する必要があります。However, there is a timing issue you should be aware of. コンテキストメニュー ContextMenuOpeningをハンドラーで完全に置き換えるには、最初のコンテキストメニューを null または空にすることはできません。In order to completely replace the context menu through a ContextMenuOpening handler, the initial context menu must not be null / empty. または、イベントを処理し、新しいコンテキストメニューを手動で開く必要がある場合もあります。Alternatively, you might need to handle the event and then manually open a new context menu. 詳細については、「方法: ContextMenuOpening イベントを処理します。For details, see How to: Handle the ContextMenuOpening Event.

このイベントをスタイルEventTriggerのとして使用するには、基になる添付イベントを参照する必要があります。To use this event as an EventTrigger in a style, you must reference the underlying attached event:

<EventTrigger RoutedEvent="ContextMenuService.ContextMenuOpening">
  <!-- storyboard here ... -->

(この使用方法は、基になるFrameworkElementサービスイベントを公開するのイベント実装が、 ContextMenuOpeningトリガーで使用できるように識別子をマップしないために必要です)。(This usage is required because the event implementation on FrameworkElement that exposes the underlying service event does not map the ContextMenuOpening identifier such that you can use it in triggers).

ContextMenu自体はFrameworkElement派生クラスですが、このイベントは、ソースとして開かれているコンテキストメニューからは発生しません。ContextMenu itself is a FrameworkElement derived class, but this event will not be raised from the context menu being opened as a source. イベントは、コンテキストメニューをプロパティとして "所有" する要素から発生し、ユーザーが UI でコンテキストメニューを開こうとしたときにのみ発生します。The event is raised from the element that "owns" the context menu as a property and is only raised when a user attempts to open a context menu in the UI. それContextMenu自体がContextMenuプロパティを持つことはできますが、このシナリオは避ける必要があります ( FrameworkElement.ContextMenu詳細については、「」を参照してください)。It is possible for ContextMenu itself to have a ContextMenu property, but you should avoid this scenario (for details, see FrameworkElement.ContextMenu).

クラスContextMenu自体にも同様のイベント (Opened) がありOpenedますが、ユーザー操作をキャンセルすることはできません。The ContextMenu class itself also has a similar event (Opened) but Opened does not provide you the opportunity to cancel the user action.

ルーティングされたイベント情報Routed Event Information

識別子フィールドIdentifier field ContextMenuOpeningEvent
ルーティング方法Routing strategy バブリングBubbling
DelegateDelegate ContextMenuEventHandler
  • OnContextMenuOpeningオーバーライドして、派生クラスでこのイベントのクラス処理を実装します。Override OnContextMenuOpening to implement class handling for this event in derived classes.