Учебники

XAML — обработка событий

Общая концепция событий в 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; 
         } 
      }
   }
}

Когда вы скомпилируете и выполните приведенный выше код, он выдаст следующий вывод:

Выходные данные ContextMenu

Мы рекомендуем вам выполнить приведенный выше пример кода и поэкспериментировать с некоторыми другими событиями.

Проверено

Срабатывает, когда отмечена кнопка 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)