Читайте также:
|
|
Из описания событий в интерфейсе класса Button следует, что он поддерживает не только непосредственные события мыши (MouseUp, MouseDown и т.д.), но и событие Click, которое является абстракцией гораздо более высокого уровня, чем просто событие мыши. Оно возникает и тогда, когда пользователь нажимает пробельную клавишу (при условии, что кнопка владеет фокусом) или клавишу Enter (если это кнопка по умолчанию для окна). Нажатие кнопки – это семантическое событие, тогда как события мыши относятся к физическим.
У написания кода для обработки именно события Click есть два преимущества:
· мы не привязываемся к конкретному жесту пользователя (операции с мышью или клавиатурой);
· мы не ограничиваем себя только кнопкой.
Каждый из элементов CheckBox, RadioButton, Button и Hyperlink поддерживает нажатие. Если обработчик связан с событием Click, то он применим к любому компоненту, который может быть «нажат». Такое отделение кода от действия обеспечивает большую гибкость в реализации обработчиков. Однако самим событиям присуща некая форма зависимости; требуется, чтобы метод-обработчик имел вполне определенную сигнатуру. Например, делегат для обработки события Button.Click определен следующим образом:
public delegate void RoutedEventHandler(object sender,RoutedEventArgs e);
Одна из целей WPF – поддержать широкий спектр действий: от тесно связанных физических событий (например, MouseUp) до чисто семантических извещений (например, команды ApplicationCommands.Close, которая сигнализирует о том, что окно должно быть закрыто).
Допуская слабую связь, мы получаем возможность писать шаблоны, которые радикально меняют элемент управления. Например, включив кнопку, ассоциированную с командой Close, мы сможем написать шаблон для окна, который добавляет элемент для закрытия:
<ControlTemplate TargetType=’{x:Type Window}’>
<DockPanel>
<StatusBar DockPanel.Dock=’Bottom’>
<StatusBarItem>
<Button Command=’{x:Static ApplicationCommands.Close}’ >
Close
</Button>
</StatusBarItem>
</StatusBar>
<ContentPresenter />
</DockPanel>
</ControlTemplate>
Теперь можно заставить окно закрываться, когда любой компонент пошлет команду Close; для этого достаточно добавить в код класса окна соответствующую привязку:
public MyWindow()
{
InitializeComponent();
CommandBindings.Add(
new CommandBinding(ApplicationCommands.Close,CloseExecuted));
}
void CloseExecuted(object sender, ExecuteRoutedEventArgs e)
{
this.Close();
}
Команды – это наименее связанная модель действий в WPF. Слабая связь обеспечивает полное абстрагирование от источника действия (в данном случае кнопки) и от обработчика действия (в данном случае окна). Мы могли бы изменить стиль окна, воспользовавшись совершенно другим элементом управления, и при этом приложение продолжало бы функцианировать.
Дата добавления: 2015-08-13; просмотров: 75 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Композиция элементов | | | События |