Show / Hide Table of Contents

Обработка событий в Visual Basic и WPF

Для языка Microsoft Visual Basic .NET в частности, можно использовать конкретного языка Handles ключевое слово, чтобы связать обработчики событий с экземплярами, вместо присоединения обработчиков событий с атрибутами или с помощью AddHandler метод. Однако метод присоединения обработчиков к экземплярам Handles имеет некоторые ограничения, так как синтаксис Handles не поддерживает некоторые возможности перенаправленных событий системы событий WPF.

Использование ключевого слова Handles в приложениях WPF

Все обработчики событий, которые подключены к экземплярам и событиям с помощью Handles, должны быть определены внутри объявления частичного класса экземпляра, который также является требованием для обработчиков событий, назначенных с помощью значений атрибутов в элементах. Можно указать только Handles для элемента на странице, которая имеет Name значение свойства (или директива x: Name объявлен). Это обусловлено Name в XAML создает ссылку на экземпляр, который необходим для поддержки Instance.Event формат ссылки, необходимые Handles синтаксис. Единственным элементом, который может использоваться для Handles без Name ссылка является экземпляром корневого элемента, который определяет разделяемый класс.

Можно назначить один и тот же обработчик для нескольких элементов, разделяя запятыми ссылки Instance.Event после Handles.

Можно использовать Handles для назначения более одного обработчика для той же ссылки Instance.Event. Не следует придавать значения порядку, в котором приведены обработчики в ссылке Handles; предполагается, что обработчики, обрабатывающие одно и тоже событие, могут вызываться в любом порядке.

Чтобы удалить обработчик, который был добавлен с Handles в объявлении, можно вызвать RemoveHandler.

Можно использовать Handles для присоединения обработчиков для перенаправленных событий до тех пор, пока обработчики присоединяются к экземплярам, которые определяют обрабатываемое в таблицах элементов событие. Для перенаправленных событий, обработчики, присоединенные с помощью Handles следуют тем же правилам маршрутизации, что и обработчики, присоединенные как XAML атрибуты, или с общей сигнатурой AddHandler. Это означает, что если событие уже помечено как обработанное ( Handled свойство в данных события является True), то обработчики, присоединенные с помощью Handles не вызываются в ответ на этот экземпляр события. Событие не может быть помечено как обрабатываемое обработчиками экземпляров из другого элемента маршрута или обработкой класса либо из текущего элемента, либо из более ранних элементов маршрута. Для событий ввода, которые поддерживают события восходящей и нисходящей маршрутизации, нисходящая маршрутизация может пометить пару событий как обрабатываемую. Дополнительные сведения о перенаправленных событиях см. в разделе Общие сведения о перенаправленных событиях.

Ограничения ключевого слова Handles при добавлении обработчиков

Handles не может ссылаться на обработчики для присоединенных событий. Необходимо использовать метод доступа add для присоединенных событий или атрибуты события typename.eventname в XAML. Дополнительные сведения см. в разделе Общие сведения о перенаправленных событиях.

Для перенаправленных событий можно использовать Handles только для назначения обработчиков экземплярам, в которых это событие существует в таблице элементов экземпляра. Однако в общем случае маршрутизации событий, родительский элемент может быть слушателем события от дочерних элементов, даже если этого события нет в таблице элементов родительского элемента. В синтаксисе атрибута это можно указать через форму атрибута typename.membername, которая определяет, какой тип фактически определяет обрабатываемое событие. Например, родительский Page (не имеющий Click события, определенного) может прослушивать события нажатий кнопки путем назначения атрибута обработчика в форме Button.Click. Но Handles не поддерживает форму typename.membername, так как он должен поддерживать конфликтующую форму Instance.Event. Дополнительные сведения см. в разделе Общие сведения о перенаправленных событиях.

Handles не удается присоединить обработчики, вызывающиеся для событий, которые уже помечено как обработанное. Вместо этого необходимо использовать код и вызвать handledEventsToo перегруженная версия AddHandler(RoutedEvent, Delegate, Boolean).

Note

Не используйте Handles синтаксиса в коде Visual Basic при указании обработчик событий для того же события в XAML. В таком случае обработчик событий вызывается дважды.

Как в WPF реализуются функциональные возможности ключевого слова Handles

Когда XAML компиляции страницы промежуточный файл объявляет Friend WithEvents ссылки на страницу, содержащую каждый элемент Name набор свойств (или директива x: Name объявлен). Каждый именованный экземпляр является потенциальным элементом, который можно присвоить обработчику с помощью Handles.

Note

В Microsoft Visual Studio IntelliSense может показать варианты завершения элементами, доступными для ссылки Handles на странице. Но для того чтобы промежуточный файл смог заполнить все ссылки Friends, может потребоваться один проход компиляции.

См. также

  • AddHandler
  • Маркировка перенаправленных событий как обработанных и обработка классов
  • Общие сведения о перенаправленных событиях
  • Обзор XAML (WPF)
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX