文章目录
- WPF事件的参数定义
- 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**
- 18. **MouseRightButtonDown**
- 19. **MouseRightButtonUp**
- 20. **PreviewKeyDown**
- 21. **PreviewKeyUp**
- 22. **PreviewTextInput**
- 23. **SizeChanged**
- 24. **SourceInitialized**
- 25. **StateChanged**
- 26. **KeyDown**
- 27. **KeyUp**
- 28. **TextInput**
- 29. **Initialized**
- 30. **Loaded**
- 31. **Unloaded**
- 32. **Closing**
- 33. **Closed**
WPF事件的参数定义
在 WPF(Windows Presentation Foundation)中,事件处理程序通常有两个参数:sender
和 e
。这两个参数在事件处理过程中起着关键作用,分别提供了事件的触发源和事件的详细信息。下面详细解释这两个参数的用途和使用方法。
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
类是一个基类,用于存储与特定事件相关的信息。不同的事件类型可能会有不同的事件参数类,以便提供特定的信息。
常见的事件参数类
-
EventArgs
:- 最基本的事件参数类,不包含任何特定信息。
-
RoutedEventArgs
:- WPF中大多数UI事件使用的事件参数类,继承自
EventArgs
。 - 提供了与路由事件相关的属性,如源元素、事件路由方向等。
- WPF中大多数UI事件使用的事件参数类,继承自
-
MouseEventArgs
:- 与鼠标事件相关的事件参数类,继承自
InputEventArgs
。 - 提供鼠标位置、按钮状态、滚轮信息等。
- 与鼠标事件相关的事件参数类,继承自
-
KeyboardEventArgs
:- 与键盘事件相关的事件参数类,继承自
InputEventArgs
。 - 提供按键信息,如键码、修饰符等。
- 与键盘事件相关的事件参数类,继承自
-
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
- 触发条件: 当窗口关闭并销毁时触发。
- 用途: 用于在窗口关闭后执行清理操作,例如释放资源。