服装销售网站设计与制作,王烨妮,网站SEM优化如何做,wordpress crossappleC# WPF编程-路由事件 路由事件概要路由事件的三种方式 WPF事件WPF最重要的5类事件#xff1a;生命周期事件 鼠标事件键盘事件多点触控输入原始触控 路由事件概要
路由事件是具有更强传播能力的事件#xff0c;它们可在元素树中向上冒泡和向下隧道传播#xff0c;并沿着传播… C# WPF编程-路由事件 路由事件概要路由事件的三种方式 WPF事件WPF最重要的5类事件生命周期事件 鼠标事件键盘事件多点触控输入原始触控 路由事件概要
路由事件是具有更强传播能力的事件它们可在元素树中向上冒泡和向下隧道传播并沿着传播路径被事件处理程序处理。
路由事件的三种方式
与普通.NET事件类似的直接路由事件(direct event)。在包含层次中向上传递的冒泡路由事件(bubbling event)。在包含层次中向下传递的隧道路由事件(tunneling event)。
定义、注册和封装路由事件
以Button的Click事件为例
public abstract class ButtonBase: ContentControl,...
{// 定义事件public static readonly RouteEvent ClickEvent;// 注册事件static ButtonBase(){ButtonBase.ClickEvent EventManager.RegisterRouteEvent(Click, RoutingStrategy.Bullle, typeof(RoutedEventHandler), typeof(ButtonBase));...}// 封装事件public event RoutedEventHandler Click{add{base.AddHandler(ButtonBase.ClickEvent, value);}remove{base.RemoveHandler(ButtonBase.ClickEvent, value);}} ...
}共享路由事件 可在类之间共享路由事件的定义。 如UIElement.MouseUpEvent Mouse.MouseUpEvent.AddOwner(typeof(UIElement)); 引发路由事件 与所有事件类似定义类需要在一定情况下引发事件。使用RaiseEvent()方法引发事件。 如RouteEventArgs e new RouteEventArgs(ButtonBase.ClickEvent, this); base.RaiseEvent(e); 处理路由事件 XAML标签中定义: Image Source“1.png” Name“img” MouseUp“img_MouseUp” / C# 代码中 private void img_MouseUp(object sender, MouseButtonEventArgs e) { } 添加事件 代码中和XAML标记中同样效果 img.MouseUp new MouseButtonEventHandler(img_MouseUp); 更精简的语法隐式地创建合适的委托对象 img.MouseUp img_MouseUp; 自行调用UIElement.AddHandler()方法直接连接事件 img.AddHandler(Image.MouseUpEvent, new MouseButtonEventHandler(img_MouseUp)); 移除事件 使用-运算符 img.MouseUp - img_MouseUp;使用UIElement.RemoveHandler()方法 img.RemoveHandler(Image.MouseUpEvent, new MouseButtonEventHandler(img_MouseUp));
RouteEventArgs类
附件事件 所有按键的单击事件都会触发调用DoSomething事件处理函数 隧道事件 隧道路由事件易于识别它们都以Preview开头。WPF通常成对地定义冒泡路由事件和隧道路由事件。如冒泡事件MouseUp和隧道事件PrevieMouseUp。
WPF事件
WPF最重要的5类事件
**生命周期事件**在元素被初始化、加载或卸载时发生这些事件。**鼠标事件**操作鼠标时发生的事件。**键盘事件**操作键盘时发生的事件。**手写笔事件**操作手写笔时发生的事件。多点触控事件 操作触摸屏时发生的事件。
生命周期事件 鼠标事件
获取鼠标Move事件的鼠标坐标信息 private void Window_MouseMove(object sender, MouseEventArgs e){Point pt e.GetPosition(this);Console.WriteLine($Window_MouseMove {pt.X}, {pt.Y});}private void Window_MouseUp(object sender, MouseButtonEventArgs e){Console.WriteLine(Window_MouseUp);}private void Window_MouseDown(object sender, MouseButtonEventArgs e){Console.WriteLine(Window_MouseDown);}private void Window_MouseEnter(object sender, MouseEventArgs e){Console.WriteLine(Window_MouseEnter);}private void Window_MouseLeave(object sender, MouseEventArgs e){Console.WriteLine(Window_MouseLeave);}private void Window_MouseDoubleClick(object sender, MouseButtonEventArgs e){Console.WriteLine(Window_MouseDoubleClick);}private void Window_MouseMove(object sender, MouseEventArgs e){Point pt e.GetPosition(this);Console.WriteLine($Window_MouseMove {pt.X}, {pt.Y});}鼠标捕获 鼠标拖放
键盘事件 Grid Button.ClickGrid_Click KeyDownGrid_KeyDownStackPanelButton Namebtn1 Width20 Height30 Margin10 Clickbtn1_ClickOK/ButtonTextBox TextInputTextBox_TextInput/TextBox/StackPanel
/Gridprivate void Grid_KeyDown(object sender, KeyEventArgs e){Console.WriteLine(${e.Key.ToString()});}private void TextBox_TextInput(object sender, TextCompositionEventArgs e){Console.WriteLine(${e.Text});}KeyboardDevice属性提供的方法
多点触控输入 原始触控