XAML - 事件处理

  • 简述

    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; 
             } 
          }
       }
    }
    
    当您编译并执行上述代码时,它将产生以下输出 -
    上下文菜单输出
    我们建议您执行上述示例代码并尝试一些其他事件。
  • 活动

    序号 控制和说明
    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
    在此元素的命中测试区域上发生其他未处理的 Hold 交互时发生。(继承自 UIElement)
    15
    Intermediate
    当 ToggleButton 的状态切换到不确定状态时触发。(继承自 ToggleButton)
    16
    IsEnabledChanged
    在 IsEnabled 属性更改时发生。(继承自控制)
    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)