UIElement.AddHandler(RoutedEvent, Object, Boolean) Метод

Определение

Добавляет перенаправленный обработчик событий для указанного перенаправленного события, добавив обработчик в коллекцию обработчика текущего элемента. Укажите handledEventsToo , как true вызвать предоставленный обработчик, даже если событие обрабатывается в другом месте.

public:
 virtual void AddHandler(RoutedEvent ^ routedEvent, Platform::Object ^ handler, bool handledEventsToo) = AddHandler;
void AddHandler(RoutedEvent const& routedEvent, IInspectable const& handler, bool const& handledEventsToo);
public void AddHandler(RoutedEvent routedEvent, object handler, bool handledEventsToo);
function addHandler(routedEvent, handler, handledEventsToo)
Public Sub AddHandler (routedEvent As RoutedEvent, handler As Object, handledEventsToo As Boolean)

Параметры

routedEvent
RoutedEvent

Идентификатор для обработки перенаправленного события.

handler
Object

Platform::Object

IInspectable

Ссылка на реализацию обработчика.

handledEventsToo
Boolean

bool

true для регистрации обработчика, который вызывается, даже если перенаправленное событие помечается в его данных события.

false чтобы зарегистрировать обработчик с условием по умолчанию, которое не будет вызываться, если перенаправленное событие уже отмечено. Значение по умолчанию — false.

Обычно не запрашивайте повторное использование перенаправленного события, так как оно вмешивается в предназначенную структуру системы событий среда выполнения Windows для создания элементов управления.

Примеры

В этом примере показан базовый синтаксис для подключения обработчика событий с AddHandler и handledEventsToo как true. В этом случае проводное событие будет касано. Обычное место для проводных обработчиков загружается для страницы или OnApplyTemplate для шаблона элемента управления.

void MainPage::pageRoot_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
     //implementation
}
void MainPage::pageRoot_Loaded(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
     this->AddHandler(UIElement::TappedEvent, ref new TappedEventHandler(this, &MainPage::pageRoot_Tapped), true);
}
private void pageRoot_Tapped(object sender, TappedRoutedEventArgs e)
{
    //implementation
}
private void pageRoot_Loaded_1(object sender, RoutedEventArgs e)
{
    this.AddHandler(UIElement.TappedEvent, new TappedEventHandler(pageRoot_Tapped), true);
}

Комментарии

Не пытайтесь использовать AddHandler в качестве общей замены синтаксиса для конкретного языка, который обычно используется для обработчиков событий проводки; он не будет работать, так как не все события имеют идентификатор, который можно передать как routedEvent. AddHandler предназначен специально для перенаправленных событий и предназначен в основном для конкретного сценария, включенного путем передачи handledEventsToo как true. Дополнительные сведения см. в разделе "События" и обзор перенаправленных событий.

Идентификаторы событий маршрутизации

Идентификатор перенаправленного события обычно является статическим элементом свойства UIElement. Например, чтобы добавить обработчик события KeyUp , передайте KeyUpEvent для этого параметра. Только небольшое количество событий среда выполнения Windows имеет этот идентификатор. Только перенаправленные события в UIElement имеют API идентификатора, доступный для этого использования. Обычно это события, связанные с входными действиями на различных уровнях: уровень указателя, уровень жестов, уровень манипуляций. Кроме того, события ввода ключей можно обрабатывать таким образом.

Ниже приведен список маршрутизоваемых событий, которые предоставляют идентификатор маршрутизоваемого события, и таким образом могут обрабатываться обработчиками, зарегистрированными вызовом AddHandler :

Параметр обработчика

Параметр handler является нетипизированным параметром, но необходимо предоставить новый делегат, который ссылается на метод обработчика, относящееся к требуемому событию. Например, при обработке события KeyUp передайте новый экземпляр KeyEventHandler , который ссылается на метод, основанный на этой KeyEventHandler подписи делегата. Для этого требуется разыменовка, а синтаксис деиференции зависит от того, какой язык используется. См. примеры в этом разделе.

Когда следует использовать handledEventsToo

Обработка низкоуровневых событий ввода практически является сложной задачей. Многие элементы управления реализуют поведение, в котором определенное событие помечается как обработанное, и заменяется другим более интуитивно понятным событием. Как правило, элемент управления помечает перенаправленное событие как обработанное только в том случае, если для этого существует некоторое намерение проектирования. Однако в некоторых сценариях эти намерения проектирования могут не быть тем, что требуется для конкретной обработки события ввода. Это для этих сценариев, которые регистрируют обработчики соответствующим handledEventsTootrue образом. Но вы не должны делать это регулярно. Вызов обработчиков в ответ на все события, даже если обработка будет усложнять собственную логику обработки событий приложения. Если логика обработчика является существенной, может возникнуть снижение производительности. Необходимо подключить обработчики к уже обработанным событиям, только если вы обнаружили, что определенные элементы управления обрабатывают события, которые необходимо обрабатывать с помощью логики приложения.

Другим способом предотвращения поведения обработки классов элемента управления является подкласс, который управляет и переопределяет методы OnEvent , которые предварительно настроены переопределения, с помощью которых элемент управления помечает событие как обработанное. Однако это тоже может быть сложным. Возможно, потребуется воспроизвести реализацию элемента управления без вызова базовой реализации, так как базовая реализация помечает событие как обработанное. Дополнительные сведения см. в разделе "События" и обзор перенаправленных событий.

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

См. также раздел