Общая концепция событий в XAML аналогична событиям в других популярных языках программирования, таких как .NET и C ++. В XAML все элементы управления предоставляют некоторые события, чтобы их можно было подписать для определенных целей.
Всякий раз, когда происходит событие, приложение уведомляется, и программа может реагировать на них, например, кнопки закрытия используются для закрытия диалога.
Существует много типов событий, которые могут быть подписаны на различные варианты поведения приложения в зависимости от требований этого приложения, но наиболее часто используемые события — это события, связанные с мышью и клавиатурой, такие как,
- Нажмите
- 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; } } } }
Когда вы скомпилируете и выполните приведенный выше код, он выдаст следующий вывод:
Мы рекомендуем вам выполнить приведенный выше пример кода и поэкспериментировать с некоторыми другими событиями.
Проверено
Срабатывает, когда отмечена кнопка ToggleButton. (Унаследовано от ToggleButton)
Нажмите
Происходит при нажатии кнопки управления. (Унаследовано от ButtonBase)
ContextMenuClosing
Происходит непосредственно перед закрытием любого контекстного меню элемента. (Унаследовано от FrameworkElement.)
ContextMenuOpening
Происходит при открытии любого контекстного меню элемента. (Унаследовано от FrameworkElement.)
DataContextChanged
Происходит при изменении значения свойства FrameworkElement.DataContext. (Унаследовано от FrameworkElement)
DragEnter
Происходит, когда система ввода сообщает об основном событии перетаскивания с этим элементом в качестве цели. (Унаследовано от UIElement).
DragLeave
Происходит, когда система ввода сообщает об основном событии перетаскивания с этим элементом в качестве источника. (Унаследовано от UIElement)
Перетащить за
Происходит, когда система ввода сообщает об основном событии перетаскивания с этим элементом в качестве потенциальной цели удаления. (Унаследовано от UIElement)
DragStarting
Происходит, когда начинается операция перетаскивания. (Унаследовано от UIElement)
DropCompleted
Происходит, когда операция перетаскивания завершена. (Унаследовано от UIElement)
DropDownClosed
Происходит, когда раскрывающаяся часть ComboBox закрывается.
DropDownOpened
Происходит при открытии раскрывающейся части ComboBox.
GotFocus
Происходит, когда UIElement получает фокус. (Унаследовано от UIElement)
Держа
Происходит, когда в области проверки попадания этого элемента происходит другое необработанное удержание. (Унаследовано от UIElement)
промежуточный
Срабатывает, когда состояние кнопки ToggleButton переключается в неопределенное состояние. (Унаследовано от ToggleButton)
IsEnabledChanged
Происходит при изменении свойства IsEnabled. (Унаследовано от контроля)
KeyDown
Происходит при нажатии клавиши клавиатуры, когда элемент UIElement имеет фокус. (Унаследовано от UIElement)
KeyUp
Происходит при отпускании клавиши клавиатуры, когда элемент UIElement находится в фокусе. (Унаследовано от UIElement)
LostFocus
Происходит, когда элемент UIElement теряет фокус. (Унаследовано от UIElement)
ManipulationCompleted
Происходит после завершения манипуляции с элементом UIElement. (Унаследовано от UIElement)
ManipulationDelta
Происходит, когда устройство ввода меняет положение во время манипуляции. (Унаследовано от UIElement)
ManipulationInertiaStarting
Происходит, когда устройство ввода теряет контакт с объектом UIElement во время манипуляции и начинается инерция. (Унаследовано от UIElement)
ManipulationStarted
Происходит, когда устройство ввода начинает манипулирование элементом UIElement. (Унаследовано от UIElement)
ManipulationStarting
Происходит при первом создании процессора манипуляции. (Унаследовано от UIElement)
SelectionChanged
Происходит, когда выделение текста изменилось.
SizeChanged
Происходит, когда свойство ActualHeight или ActualWidth изменяет значение в FrameworkElement. (Унаследовано от FrameworkElement)
непроверенный
Происходит, когда кнопка ToggleButton не отмечена. (Унаследовано от ToggleButton)
ValueChanged
Происходит при изменении значения диапазона. (Унаследовано от RangeBase)