美文网首页
WPF 路由事件 与 命令

WPF 路由事件 与 命令

作者: 李霖弢 | 来源:发表于2019-11-18 15:59 被阅读0次

事件

事件的前身是消息(在窗体点左键会生成一条携带参数的消息加入windows待处理消息队列,当windows处理到这条消息时会把其发给窗体,窗体再用自己的消息处理函数进行响应)。
消息封装成事件模型后得到简化,只需关注事件的拥有者、响应者、订阅关系(如A订阅了B的事件,即B.EventA.EventHandler存在绑定关系),本质上是一个用event关键字修饰了的委托实例。
在CLR直接事件模型中,事件的拥有者就是消息的发送者。

路由事件是WPF提供的事件机制,用于弥补直接事件的以下缺陷

  1. 每对事件都要单独进行显示绑定
  2. 事件宿主必须能够访问事件响应者以建立订阅关系

路由事件的拥有者和响应者之间没用显示订阅关系,订阅者只负责激发事件,由响应者决定要侦听的事件。
WPF中的事件大多为可路由事件,

<Grid x:Name="myGrid" Button.Click="ButtonClicked">
    <Grid.ColumnDefinitions>
        <ColumnDefinition></ColumnDefinition>
        <ColumnDefinition></ColumnDefinition>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <Button x:Name="myButton" Grid.Column="0" Grid.Row="1" Content="Click Me"></Button>
</Grid>
...
public partial class Event : Window
{
    public Event()
    {
        InitializeComponent();
        //也可以不用Button.Click="ButtonClicked"而直接在逻辑中定义
        //myGrid.AddHandler(Button.ClickEvent,new RoutedEventHandler(ButtonClicked));
    }

    private void ButtonClicked(object sender,RoutedEventArgs e)
    {
        //与直接事件不同,此处sender是grid而非button,需通过e.OriginalSource查看事件源头
        MessageBox.Show((e.OriginalSource as FrameworkElement).Name);
    }
}

此外还有自定义路由事件,可自定义冒泡方式(气泡、隧道和直接)。

命令 Command

由事件的触发源控制接收者如何进行工作,默认左单击为执行命令的时机。

相关文章

  • WPF 路由事件 与 命令

    事件 事件的前身是消息(在窗体点左键会生成一条携带参数的消息加入windows待处理消息队列,当windows处理...

  • WPF之路-路由事件

    理解路由事件 路由事件是一种可以针对元素树中的多个侦听器而不是仅仅针对引发该事件的对象调用处理程序的事件,也就是说...

  • WPF路由

    举例:窗口-用户控件-布局控件-…-按钮 按钮的点击事件:先由按钮的Click相应,然后….,然后布局控件,然后用...

  • WPF简介

    目录 什么是WPF? WPF的历史? 为什么要用WPF及WPF作用 WPF与winForm区别? 什么是WPF? ...

  • WPF/C#学习笔记.1:WPF中的布局TabControl,G

    WPF/C#学习笔记.1 WPF中的布局TabControl,Grid与GridSpliter等 WPF布局原则 ...

  • 华为路由器交换机配置命令大整合,非常全,附pdf下载!

    一、计算机命令:【基于linux系统下的相关命令】 二、交换机命令 三、路由器命令 3.1静态路由 3.2动态路由...

  • WPF之路-键盘与鼠标事件

    键盘事件 事件类型分为以下几个类型 生命周期事件:在元素加载与卸载的时候发生 鼠标事件:鼠标动作 键盘事件:键盘动...

  • 【WPF】Command 自定义命令

    在使用 MVVM 结构的 WPF 程序中,ViewModel 对 View 的响应是通过 Command (命令)...

  • WPF初印象

    一、与WPF结缘 第一次接触WPF是在2012年。学习了WinForm编程之后,了解到WPF这个非常先进的UI框架...

  • 浅谈WPF的数据绑定,路由事件和MVVM模式

    注:本文出现的所有代码为了简单明了均省略了很多细节部分,只注重原理,直接复制粘贴运行得不到对应的结果。 WPF的数...

网友评论

      本文标题:WPF 路由事件 与 命令

      本文链接:https://www.haomeiwen.com/subject/adlkictx.html