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

Определение

Происходит при открытии какого-либо контекстного меню в элементе.Occurs when any context menu on the element is opened.

public:
 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 ... -->
</EventTrigger>

(Это необходимо, поскольку реализация 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. Событие вызывается из элемента, который "владеет" контекстным меню в качестве свойства и вызывается только тогда, когда пользователь пытается открыть контекстное меню в пользовательском интерфейсе.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. У себя может быть FrameworkElement.ContextMenuсвойство, но следует избегать такой ситуации (Дополнительные сведения см. в разделе). ContextMenu ContextMenuIt is possible for ContextMenu itself to have a ContextMenu property, but you should avoid this scenario (for details, see FrameworkElement.ContextMenu).

Сам класс также имеет аналогичное событие (Opened), но Opened не дает возможности отменить действие пользователя. ContextMenuThe 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
делегатDelegate ContextMenuEventHandler
  • Переопределение OnContextMenuOpening для реализации обработки класса для этого события в производных классах.Override OnContextMenuOpening to implement class handling for this event in derived classes.

Применяется к

Дополнительно