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.