wpf 全网最全!窗体(Windows)的常见事件及其详细解释

WPF事件的参数定义

在 WPF(Windows Presentation Foundation)中,事件处理程序通常有两个参数:sendere。这两个参数在事件处理过程中起着关键作用,分别提供了事件的触发源和事件的详细信息。下面详细解释这两个参数的用途和使用方法。


1. sender 参数

定义

sender 是一个 object 类型的参数,表示触发事件的对象。

用途
  • sender 用于确定哪个控件或对象触发了事件。
  • 可以在事件处理程序中对 sender 进行类型转换,以便访问该对象的属性或方法。
示例

假设我们有一个按钮,点击按钮时触发事件。

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 将 sender 转换为 Button 类型
    Button clickedButton = (Button)sender;

    // 访问按钮的属性
    string buttonText = clickedButton.Content.ToString();
    MessageBox.Show($"Clicked button with text: {buttonText}");
}
注意
  • sender 通常是一个控件或对象的引用,而不是事件参数。
  • 在事件处理程序中,如果你需要访问触发事件的控件的属性(如按钮的内容或文本框的文本),可以通过 sender 进行类型转换。

2. e 参数

定义

e 是一个继承自 EventArgs 或其派生类的对象,表示事件的详细信息。

用途
  • e 提供与事件相关的额外信息,例如鼠标位置、键盘按键、路由事件的传播路径等。
  • 不同的事件类型对应不同的事件参数类。例如:
    • RoutedEventArgs:用于路由事件(如 Click 事件)。
    • MouseEventArgs:用于鼠标事件(如 MouseMove 事件)。
    • KeyEventArgs:用于键盘事件(如 KeyDown 事件)。
常用属性
  • RoutedEventArgs 的常用属性:

    • OriginalSource:获取事件的原始触发对象(通常在事件路由过程中使用)。
    • Handled:标记事件是否已经被处理(设置为 true 可以阻止事件的进一步传播)。
    • Source:获取事件的实际触发对象。
  • MouseEventArgs 的常用属性:

    • GetPosition(IInputElement relativeTo):获取鼠标相对于某个元素的位置。
    • LeftButton/RightButton:获取鼠标按键的状态。
  • KeyEventArgs 的常用属性:

    • Key:获取按下的键盘按键。
    • IsDown/IsUp:判断按键是否按下或释放。
示例

假设我们有一个按钮,点击按钮时获取鼠标的位置。

private void Button_Click(object sender, RoutedEventArgs e)
{
    // 获取鼠标相对于按钮的位置
    Point mousePosition = e.GetPosition((IInputElement)sender);
    MessageBox.Show($"Mouse position on button: X={mousePosition.X}, Y={mousePosition.Y}");
}

事件参数(EventArgs)

在WPF中,事件参数是通过继承自EventArgs类的子类来传递的。EventArgs类是一个基类,用于存储与特定事件相关的信息。不同的事件类型可能会有不同的事件参数类,以便提供特定的信息。

常见的事件参数类

  1. EventArgs

    • 最基本的事件参数类,不包含任何特定信息。
  2. RoutedEventArgs

    • WPF中大多数UI事件使用的事件参数类,继承自EventArgs
    • 提供了与路由事件相关的属性,如源元素、事件路由方向等。
  3. MouseEventArgs

    • 与鼠标事件相关的事件参数类,继承自InputEventArgs
    • 提供鼠标位置、按钮状态、滚轮信息等。
  4. KeyboardEventArgs

    • 与键盘事件相关的事件参数类,继承自InputEventArgs
    • 提供按键信息,如键码、修饰符等。
  5. TextChangedEventArgs

    • 与文本更改事件相关的事件参数类,继承自EventArgs
    • 提供有关文本更改的信息,如更改的起始位置和添加的文本

WPF窗体(Window)常见事件


1. Activated

  • 触发条件: 当窗口被激活(成为前台窗口)时触发。
  • 用途: 常用于在窗口激活时执行某些操作,例如刷新数据或重新加载内容。

2. Closed

  • 触发条件: 当窗口被关闭后触发。
  • 用途: 用于在窗口关闭后执行清理操作,例如释放资源或保存数据。

3. Closing

  • 触发条件: 在窗口即将关闭时触发(例如用户点击窗口的关闭按钮时)。
  • 用途: 用于在关闭窗口前执行确认操作或取消关闭,例如提示用户保存数据。

4. ContentRendered

  • 触发条件: 当窗口的内容首次被渲染后触发。
  • 用途: 通常用于在窗口内容加载完成后执行某些操作,例如初始化控件或加载数据。

5. Deactivated

  • 触发条件: 当窗口失去激活状态(不再是最前台窗口)时触发。
  • 用途: 可以用于在窗口失去焦点时执行某些操作,例如暂停某些任务。

6. DragEnter

  • 触发条件: 当用户开始拖动对象并将其拖入窗口区域时触发。
  • 用途: 用于处理拖放操作,例如检查拖动的数据类型或显示拖放效果。

7. DragLeave

  • 触发条件: 当用户拖动对象并将其拖出窗口区域时触发。
  • 用途: 用于处理拖放操作,例如取消拖放效果。

8. DragOver

  • 触发条件: 当用户拖动对象并将其停留在窗口区域时触发。
  • 用途: 用于处理拖放操作,例如动态更新拖放效果。

9. Drop

  • 触发条件: 当用户完成拖放操作并将对象放置在窗口区域时触发。
  • 用途: 用于处理拖放操作,例如处理拖放的数据。

10. GotFocus

  • 触发条件: 当窗口获得焦点时触发。
  • 用途: 用于在窗口获得焦点时执行某些操作,例如启用某些功能。

11. LostFocus

  • 触发条件: 当窗口失去焦点时触发。
  • 用途: 用于在窗口失去焦点时执行某些操作,例如暂停某些功能。

12. LocationChanged

  • 触发条件: 当窗口的位置发生变化时触发。
  • 用途: 用于监听窗口位置的变化,例如记录窗口的当前位置。

13. MouseEnter

  • 触发条件: 当鼠标指针进入窗口区域时触发。
  • 用途: 用于在鼠标进入时执行某些操作,例如显示提示信息。

14. MouseLeave

  • 触发条件: 当鼠标指针离开窗口区域时触发。
  • 用途: 用于在鼠标离开时执行某些操作,例如隐藏提示信息。

15. MouseLeftButtonDown

  • 触发条件: 当鼠标左键在窗口区域内按下时触发。
  • 用途: 用于处理鼠标左键按下事件,例如启动拖动操作。

16. MouseLeftButtonUp

  • 触发条件: 当鼠标左键在窗口区域内释放时触发。
  • 用途: 用于处理鼠标左键释放事件,例如完成拖动操作。

17. MouseMove

  • 触发条件: 当鼠标指针在窗口区域内移动时触发。
  • 用途: 用于处理鼠标移动事件,例如动态更新UI效果。

18. MouseRightButtonDown

  • 触发条件: 当鼠标右键在窗口区域内按下时触发。
  • 用途: 用于处理鼠标右键按下事件,例如显示上下文菜单。

19. MouseRightButtonUp

  • 触发条件: 当鼠标右键在窗口区域内释放时触发。
  • 用途: 用于处理鼠标右键释放事件,例如完成上下文菜单操作。

20. PreviewKeyDown

  • 触发条件: 当用户在窗口中按下键盘按键时触发(冒泡事件)。
  • 用途: 用于处理键盘按键事件,例如捕获特定的快捷键。

21. PreviewKeyUp

  • 触发条件: 当用户在窗口中释放键盘按键时触发(冒泡事件)。
  • 用途: 用于处理键盘按键释放事件,例如检测按键状态。

22. PreviewTextInput

  • 触发条件: 当用户在窗口中输入文本时触发(例如按下键盘或粘贴文本)。
  • 用途: 用于处理文本输入事件,例如实时更新显示内容。

23. SizeChanged

  • 触发条件: 当窗口的大小发生变化时触发。
  • 用途: 用于监听窗口大小的变化,例如调整布局或重新加载内容。

24. SourceInitialized

  • 触发条件: 当窗口的源(即窗口句柄)初始化完成后触发。
  • 用途: 用于在窗口句柄初始化后执行某些操作,例如与低级别的Win32 API交互。

25. StateChanged

  • 触发条件: 当窗口的状态(如最大化、最小化、还原)发生变化时触发。
  • 用途: 用于监听窗口状态的变化,例如动态调整布局。

26. KeyDown

  • 触发条件: 当用户按下键盘上的按键时触发。
  • 用途: 用于处理键盘按键事件,例如捕获快捷键。

27. KeyUp

  • 触发条件: 当用户释放键盘上的按键时触发。
  • 用途: 用于处理键盘按键释放事件,例如检测按键状态。

28. TextInput

  • 触发条件: 当用户通过键盘或其他输入设备输入文本时触发。
  • 用途: 用于处理文本输入事件,例如实时更新显示内容。

29. Initialized

  • 触发条件: 当窗口完成初始化时触发。
  • 用途: 用于在窗口初始化后执行某些操作,例如加载数据或配置控件。

30. Loaded

  • 触发条件: 当窗口及其所有子元素加载完成并显示时触发。
  • 用途: 用于在窗口完全加载后执行某些操作,例如动态加载数据。

31. Unloaded

  • 触发条件: 当窗口从视觉树中移除时触发。
  • 用途: 用于在窗口卸载前执行清理操作,例如释放资源。

32. Closing

  • 触发条件: 当用户尝试关闭窗口时触发。
  • 用途: 用于在关闭窗口前执行确认或取消操作,例如检查未保存的数据。

33. Closed

  • 触发条件: 当窗口关闭并销毁时触发。
  • 用途: 用于在窗口关闭后执行清理操作,例如释放资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou.cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值