XAML - 事件处理


XAML 中事件的一般概念与其他流行编程语言(例如 .NET 和 C++)中的事件类似。在 XAML 中,所有控件都会公开一些事件,以便可以出于特定目的订阅它们。

每当事件发生时,应用程序都会收到通知,并且程序可以对其做出反应,例如,使用关闭按钮来关闭对话框。

根据应用程序的要求,可以为应用程序的不同Behave订阅多种类型的事件,但最常用的事件是与鼠标和键盘相关的事件,例如:

  • 点击
  • 鼠标按下
  • 鼠标输入
  • 鼠标离开
  • 鼠标按下
  • 按键按下
  • 按键向上

在本章中,我们将使用一些基本和最常用的事件来了解如何将特定控件的事件链接到背后的代码,其中将根据特定事件时用户想要执行的操作来实现Behave发生。

让我们看一个按钮单击事件的简单示例。下面给出的是 Button 控件的 XAML 实现,该控件是使用一些属性和 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事件,您可以添加任何类型的Behave作为对单击的响应。让我们看一下 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!"); 
      } 
   }
}

当您编译并执行上述代码时,它将产生以下输出 -

事件处理

当您单击该按钮时,将触发单击 (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; 
         } 
      }
   }
}

当您编译并执行上述代码时,它将产生以下输出 -

上下文菜单输出

我们建议您执行上面的示例代码并尝试一些其他事件。

活动

先生。 控制和说明
1

已检查

当选中 ToggleButton 时触发。(继承自ToggleButton)

2

点击

单击按钮控件时发生。(继承自ButtonBase)

3

上下文菜单关闭

在关闭元素上的任何上下文菜单之前发生。(继承自 FrameworkElement。)

4

上下文菜单打开

打开元素上的任何上下文菜单时发生。(继承自 FrameworkElement。)

5

数据上下文改变

当 FrameworkElement.DataContext 属性的值更改时发生。(继承自FrameworkElement)

6

拖拽输入

当输入系统报告以此元素为目标的基础拖动事件时发生。(继承自 UIElement)。

7

拖动离开

当输入系统报告以此元素为原点的基础拖动事件时发生。(继承自UIElement)

8

拖拽

当输入系统报告将此元素作为潜在放置目标的基础拖动事件时发生。(继承自UIElement)

9

拖动启动

当启动拖动操作时发生。(继承自UIElement)

10

删除完成

当拖放操作结束时发生。(继承自UIElement)

11

下拉关闭

当组合框的下拉部分关闭时发生。

12

下拉打开

当组合框的下拉部分打开时发生。

13

获得焦点

当 UIElement 获得焦点时发生。(继承自UIElement)

14

保持

当在此元素的命中测试区域上发生未处理的保持交互时发生。(继承自UIElement)

15

中间的

当 ToggleButton 的状态切换到不确定状态时触发。(继承自ToggleButton)

16

已启用更改

当 IsEnabled 属性更改时发生。(继承自Control)

17 号

按键按下

当 UIElement 具有焦点时按下键盘按键时发生。(继承自UIElement)

18

按键向上

当 UIElement 具有焦点时释放键盘按键时发生。(继承自UIElement)

19

失去焦点

当 UIElement 失去焦点时发生。(继承自UIElement)

20

操作完成

当对 UIElement 的操作完成时发生。(继承自UIElement)

21

操纵三角洲

当输入设备在操作期间改变位置时发生。(继承自UIElement)

22

操纵惯性启动

当输入设备在操作期间失去与 UIElement 对象的接触并且惯性开始时发生。(继承自UIElement)

23

操纵开始

当输入设备开始对 UIElement 进行操作时发生。(继承自UIElement)

24

操纵启动

首次创建操纵处理器时发生。(继承自UIElement)

25

选择已更改

当文本选择发生更改时发生。

26

尺寸已改变

当 FrameworkElement 上的 ActualHeight 或 ActualWidth 属性更改值时发生。(继承自FrameworkElement)

27

未选中

当未选中 ToggleButton 时发生。(继承自ToggleButton)

28

值改变

当范围值更改时发生。(继承自RangeBase)