简述
XAML 中事件的一般概念类似于 .NET 和 C++ 等其他流行编程语言中的事件。在 XAML 中,所有控件都公开一些事件,以便可以为特定目的订阅它们。
每当事件发生时,应用程序都会收到通知,并且程序可以对它们做出反应,例如,关闭按钮用于关闭对话框。
根据应用程序的需求,可以为应用程序的不同行为订阅多种类型的事件,但最常用的事件是与鼠标和键盘相关的事件,例如,
- 点击
- 鼠标按下
- 鼠标回车
- 鼠标离开
- 鼠标向上
- 按键
- 键升
在本章中,我们将使用一些基本和最常用的事件来了解特定控件的事件如何链接到代码背后的代码,具体取决于用户在特定事件时想要做什么发生。
让我们看一个按钮单击事件的简单示例。下面给出的是 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" HorizontalMoognment = "Center" />
</Grid>
</Window>
每当单击此按钮时,它将触发OnClick事件,您可以添加任何类型的行为作为对单击的响应。让我们看一下 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;
}
}
}
}
当您编译并执行上述代码时,它将产生以下输出 -
我们建议您执行上述示例代码并尝试一些其他事件。