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. В этом случае событие, которое подключается к сети, имеет значение Tapped. Обычно обработчики передачи данных загружаются для страницы или 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

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

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

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

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

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

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