События XAML

94

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

Имя События="Имя Метода Обработчика Событий"

Например, элемент управления Button предоставляет событие Click. Присоединить обработчик событий можно так, как показано ниже:

<Button ... Click="btn1Click">

Это предполагает наличие метода по имени btn1Click в классе отделенного кода. Обработчик событий должен иметь правильную сигнатуру (т.е. должен соответствовать делегату для события Click). Вот метод, который выполняет этот трюк:

private void btn1Click(object sender, RoutedEventArgs e)
{
    this.Cursor = Cursors.Help;
    System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2));
    txt1.Text = "Обычный текст...";
}

Как вы могли заметить по сигнатуре этого обработчика событий, модель событий в WPF отличается от ранних версий .NET. Здесь поддерживается новая модель, которая полагается на маршрутизацию событий.

Во многих ситуациях атрибуты используются для установки свойств и присоединения обработчиков событий в одном и том же элементе. WPF всегда работает в следующей последовательности: сначала устанавливается свойство Name (если оно есть), затем присоединяются любые обработчики событий и, наконец, устанавливаются свойства. Это значит, что любые обработчики событий, реагирующие на изменения свойств, будут запущены при первоначальной установке свойства.

Код (такой как обработчик события) допускается встраивать непосредственно в документ XAML, используя для этого элемент Code. Однако такая техника не является рекомендованной и не имеет какого-либо практического применения в WPF. Этот подход не поддерживается в Visual Studio.

При добавлении атрибута обработчика событий Visual Studio ассистирует с помощью средства IntelliSense. Как только введен символ равенства (например, после набора Click= в элементе <Button>), отображается раскрывающийся список со всеми подходящими обработчиками событий в классе отделенного кода, как показано на рисунке. Если нужно создать новый обработчик для данного события, следует выбрать элемент <New Event Handler> (Новый обработчик событий) в начале списка. В качестве альтернативы можно присоединить и создать обработчики событий, используя вкладку Events (События) окна Properties (Свойства).

Присоединение события при помощи IntelliSense

Итак, вы ознакомились с многочисленными примерами, демонстрирующими основные аспекты синтаксиса XAML. Наверняка вы согласитесь, что XAML — очень интересный язык в том плане, что позволяет описать дерево объектов .NET в декларативной манере. Хотя это исключительно полезно для конфигурирования графических пользовательских интерфейсов, следует помнить, что XAML может описать любой тип из любой сборки, если только этот тип не является абстрактным и имеет конструктор по умолчанию.

Пройди тесты
Лучший чат для C# программистов