XAML - обработка событий
Общая концепция событий в XAML аналогична событиям в других популярных языках программирования, таких как .NET и C ++. В XAML все элементы управления предоставляют некоторые события, чтобы на них можно было подписаться для определенных целей.
Каждый раз, когда происходит событие, приложение получает уведомление, и программа может реагировать на него, например, кнопки закрытия используются для закрытия диалогового окна.
Существует много типов событий, на которые можно подписаться для различного поведения приложения в зависимости от требований этого приложения, но наиболее часто используются события, связанные с мышью и клавиатурой, например,
- Click
- MouseDown
- MouseEnter
- MouseLeave
- MouseUp
- KeyDown
- KeyUp
В этой главе мы будем использовать некоторые из основных и наиболее часто используемых событий, чтобы понять, как событие определенного элемента управления может быть связано с кодом, за которым будет реализовано поведение в зависимости от того, что пользователь хочет сделать, когда определенное событие имеет место.
Давайте посмотрим на простой пример события нажатия кнопки. Ниже приводится реализация XAML для элемента управления Button, который создается и инициализируется некоторыми свойствами и событием Click (Click = "OnClick").
<Window x:Class = "XAMLEventHandling.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<Button x:Name = "button1" Content = "Click" Click = "OnClick"
Width = "150" Height = "30" HorizontalAlignment = "Center" />
</Grid>
</Window>
Каждый раз, когда нажимается эта кнопка, запускается OnClickсобытие, и вы можете добавить любой тип поведения в качестве ответа на Click. Давайте посмотрим на реализацию события OnClick, которое будет отображать сообщение при нажатии этой кнопки.
using System;
using System.Windows;
using System.Windows.Controls;
namespace XAMLEventHandling {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void OnClick(object sender, RoutedEventArgs e) {
MessageBox.Show("Button is clicked!");
}
}
}
Когда вы скомпилируете и выполните приведенный выше код, он выдаст следующий результат:
Когда вы щелкаете по кнопке, запускается событие click (OnClick) и отображается следующее сообщение.
Теперь давайте посмотрим на немного сложный пример, в котором обрабатывается несколько событий.
пример
В следующем примере содержится текстовое поле с ContextMenu, которое управляет текстом в текстовом поле.
Следующий код XAML создает TextBox, ContextMenu и MenuItems с некоторыми свойствами и событиями, такими как Checked, Unchecked и Click.
<Window x:Class = "XAMLContextMenu.MainWindow"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
Title = "MainWindow" Height = "350" Width = "604">
<Grid>
<TextBox Name = "textBox1" TextWrapping = "Wrap" Margin = "10" Grid.Row = "7">
Hi, this is XAML tutorial.
<TextBox.ContextMenu>
<ContextMenu>
<MenuItem Header = "_Bold" IsCheckable = "True"
Checked = "Bold_Checked" Unchecked = "Bold_Unchecked" />
<MenuItem Header = "_Italic" IsCheckable = "True"
Checked = "Italic_Checked" Unchecked = "Italic_Unchecked" />
<Separator />
<MenuItem Header = "Increase Font Size" Click = "IncreaseFont_Click" />
<MenuItem Header = "_Decrease Font Size" Click = "DecreaseFont_Click" />
</ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>
</Window>
Вот реализация на C # для различных событий, которые будут запускаться всякий раз, когда пункт меню отмечен, не отмечен или нажат.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace XAMLContextMenu {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
}
private void Bold_Checked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Bold;
}
private void Bold_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontWeight = FontWeights.Normal;
}
private void Italic_Checked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Italic;
}
private void Italic_Unchecked(object sender, RoutedEventArgs e) {
textBox1.FontStyle = FontStyles.Normal;
}
private void IncreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize < 18) {
textBox1.FontSize += 2;
}
}
private void DecreaseFont_Click(object sender, RoutedEventArgs e) {
if (textBox1.FontSize > 10) {
textBox1.FontSize -= 2;
}
}
}
}
Когда вы скомпилируете и выполните приведенный выше код, он выдаст следующий результат:
Мы рекомендуем вам выполнить приведенный выше пример кода и поэкспериментировать с некоторыми другими событиями.
События
Sr.No. | Элементы управления и описание |
---|---|
1 | Checked Срабатывает, когда установлен ToggleButton. (Унаследовано от ToggleButton) |
2 | Click Происходит при нажатии кнопки управления. (Унаследовано от ButtonBase) |
3 | ContextMenuClosing Происходит непосредственно перед закрытием любого контекстного меню элемента. (Унаследовано от FrameworkElement.) |
4 | ContextMenuOpening Происходит при открытии любого контекстного меню элемента. (Унаследовано от FrameworkElement.) |
5 | DataContextChanged Происходит при изменении значения свойства FrameworkElement.DataContext. (Унаследовано от FrameworkElement) |
6 | DragEnter Происходит, когда система ввода сообщает о базовом событии перетаскивания с этим элементом в качестве цели. (Унаследовано от UIElement). |
7 | DragLeave Происходит, когда система ввода сообщает о базовом событии перетаскивания с этим элементом в качестве источника. (Унаследовано от UIElement) |
8 | DragOver Происходит, когда система ввода сообщает о базовом событии перетаскивания с этим элементом в качестве потенциальной цели перетаскивания. (Унаследовано от UIElement) |
9 | DragStarting Происходит при запуске операции перетаскивания. (Унаследовано от UIElement) |
10 | DropCompleted Происходит после завершения операции перетаскивания. (Унаследовано от UIElement) |
11 | DropDownClosed Происходит при закрытии раскрывающейся части ComboBox. |
12 | DropDownOpened Происходит при открытии раскрывающейся части ComboBox. |
13 | GotFocus Происходит, когда объект UIElement получает фокус. (Унаследовано от UIElement) |
14 | Holding Происходит, когда в области проверки нажатия этого элемента происходит необработанное в противном случае удержание. (Унаследовано от UIElement) |
15 | Intermediate Срабатывает, когда состояние ToggleButton переключается на неопределенное состояние. (Унаследовано от ToggleButton) |
16 | IsEnabledChanged Происходит при изменении свойства IsEnabled. (Унаследовано от Control) |
17 | KeyDown Происходит при нажатии клавиши клавиатуры, когда UIElement находится в фокусе. (Унаследовано от UIElement) |
18 | KeyUp Происходит при отпускании клавиши клавиатуры, когда UIElement находится в фокусе. (Унаследовано от UIElement) |
19 | LostFocus Происходит, когда UIElement теряет фокус. (Унаследовано от UIElement) |
20 | ManipulationCompleted Происходит после завершения манипуляции с UIElement. (Унаследовано от UIElement) |
21 год | ManipulationDelta Происходит, когда устройство ввода меняет положение во время манипуляции. (Унаследовано от UIElement) |
22 | ManipulationInertiaStarting Происходит, когда устройство ввода теряет контакт с объектом UIElement во время манипуляции и начинается инерция. (Унаследовано от UIElement) |
23 | ManipulationStarted Происходит, когда устройство ввода начинает манипуляции с UIElement. (Унаследовано от UIElement) |
24 | ManipulationStarting Происходит при первом создании обработчика манипуляций. (Унаследовано от UIElement) |
25 | SelectionChanged Происходит при изменении выделения текста. |
26 | SizeChanged Происходит, когда свойство ActualHeight или ActualWidth изменяет значение FrameworkElement. (Унаследовано от FrameworkElement) |
27 | Unchecked Происходит, когда флажок ToggleButton не установлен. (Унаследовано от ToggleButton) |
28 | ValueChanged Происходит при изменении значения диапазона. (Унаследовано от RangeBase) |