• 路由事件2


    直接路由事件与普通的NET事件类似,只传递一层。它来源于一个元素并且不传递给其他元素。

    就比如MouseEnter事件,当鼠标一动到某个元素上时直接触发就是一个直接路由事件。

    案例:

    冒泡事件设计器:

    隧道事件设计器:

     

    直接路由事件设计器:

    以上是三个事件的样式设计,写完样式设计之后在冒泡事件中选择MouseUp右键点击转到定义,然后在TextBlock中选择MouseUp右键点击转到定义。

    交互逻辑设计:

    第二个隧道事件也是一样在设计样式中的隧道事件中选择PreviewMouseLeftButtonUp右键点击转到定义,然后在TextBlock中选择PreviewMouseLeftButtonUp右键点击转到定义。

    交互逻辑设计:

    第三个直接路由事件也是一样在直接路由事件中选择MouseEnter右键点击转到定义,然后在TextBlock中选择MouseEnter右键点击转到定义。

    交互逻辑设计:

    写完以上设计之后可运行查看效果。

    效果图:

    冒泡路由事件点击一次弹出是在YesTB_MouseUp中添加了e.Handled=true。

     

    隧道路由事件点击一次弹出是在StackPanel_PreviewMouseLeftButtonUp中加了e.Handled=true。

     

    直接路由事件鼠标移动到上下方有说明添加的e.Handled=true是无效的。

    以上三个案例的总结:冒泡路由事件在YesTB上点击首先弹出TextBlock,在弹出StackPanel。隧道事件在YesTB上点击先弹出StackPanel在弹出TextBlock,直接路由事件当鼠标移动到YesTB上先弹出TextBlock移动到Stackpanel上时直接弹出TackPanel。

    这点区别,那么我们加入e.Handled=true的时机也要不同。

    冒泡路由事件,例子中:e.Handled=true加在YesTB_MouseUp中,加入后,点击 YesTB,将只弹出“TextBlock”。

    隧道路由事件,例子中:e.Handled=true加在

    StackPanel_PreviewMouseLeftButtonUp中,加入后,点击YesTB,将只弹出

    Stackpanel”。

  • 相关阅读:
    排序算法:计数排序
    解决:Android Studio 中sdk tools 中库显示不全的问题
    Linux基础篇
    一文带你了解小程序店铺装修的设计原则
    swagger 接口测试,用 python 写自动化时该如何处理?
    SpringBoot通过@Cacheable注解实现缓存功能
    急速建立网站方法
    无线通信中CSI的含义
    [附源码]java毕业设计基于Java的快递驿站管理系统
    Calcite
  • 原文地址:https://blog.csdn.net/weixin_57784165/article/details/127772002