通过以下的演示样例代码,能够发现,我们能为随意的节点指定要监听的路由事件,而这个路由事件本身和这个元素可能根本就没有关系。

  1. <Window x:Class="Demo002.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:local="clr-namespace:Demo002"
  5. Title="MainWindow" Height="350" Width="525">
  6. <Grid x:Name="Grid1" local:TimeButton.ReportTime="ReportTimeHandler">
  7. <Grid x:Name="Grid2" local:TimeButton.ReportTime="ReportTimeHandler">
  8. <Grid x:Name="Grid3" local:TimeButton.ReportTime="ReportTimeHandler">
  9. <StackPanel x:Name="StackPanel1" local:TimeButton.ReportTime="ReportTimeHandler">
  10. <ListBox x:Name="ListBox1" />
  11. <local:TimeButton x:Name="TimeButton1" Width="80" Height="80"
  12. Content="Report Time"
  13. local:TimeButton.ReportTime="ReportTimeHandler"/>
  14. </StackPanel>
  15. </Grid>
  16. </Grid>
  17. </Grid>
  18. </Window>

当ReportTime的路由事件被触发之后,该事件会沿着树进行传递,假设到了某个节点我们已经把该事件处理了,而且无需继续往上传递,则能够通过其參数e.Handled=true来控制其无需继续传递下去了。例如以下代码所看到的:

  1. private void ReportTimeHandler(object sender, ReportTimeEventArgs e)
  2. {
  3. FrameworkElement element = sender as FrameworkElement;
  4. string content = string.Format("{0}到达{1}", e.ClickTime.ToLongTimeString(), element.Name);
  5. this.ListBox1.Items.Add(content);
  6.  
  7. if (element == this.Grid2) { e.Handled = true; }
  8. }

依照上面的代码,当路由事件传递给Grid2的时候,就被标记为已经处理了,这样路由事件就不会再传递给Grid1了。

在XAML代码中为节点树安装事件监听器的更多相关文章

  1. [原创]java WEB学习笔记48:其他的Servlet 监听器:域对象中属性的变更的事件监听器 (3 个),感知 Session 绑定的事件监听器(2个)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  2. 一:MetaMq集群中单个节点的安装配置示意图

    MetaMQ集群一个节点的安装和配置示意图[1]:下载metaMQ的安装包

  3. DOM基础知识(概念、节点树、事件、Document)

    1.   DOM概念 全称为 Document Object Model,译为文档对象模型 D:文档 - DOM将HTML页面解析为一个文档 —> document对象 O:对象 - DOM将H ...

  4. CLR事件与路由事件在XAML代码中应用时的区别

    <Window x:Class="Demo_window.Window2"xmlns="http://schemas.microsoft.com/winfx/200 ...

  5. java中jna使用回调实现事件监听器——观察者模式

    (1)C接口中的接口头文件 #pragma once #include <iostream> #include <vector> #include <core/core. ...

  6. WPF中Style文件的引用——使用xaml代码或者C#代码动态加载

    原文:WPF中Style文件的引用--使用xaml代码或者C#代码动态加载 WPF中控件拥有很多依赖属性(Dependency Property),我们可以通过编写自定义Style文件来控制控件的外观 ...

  7. vue项目中解决type=”file“ change事件只执行一次的问题

    问题描述 在最近的项目开发中遇到了这样的一个问题,当我上传了一个文件时,我将获取到的文件名清空后,却无法再次上传相同的文件 <template> <div class="h ...

  8. Spring 框架中注释驱动的事件监听器详解

    事件交互已经成为很多应用程序不可或缺的一部分,Spring框架提供了一个完整的基础设施来处理瞬时事件.下面我们来看看Spring 4.2框架中基于注释驱动的事件监听器. 1.早期的方式 在早期,组件要 ...

  9. Spring 4.2框架中注释驱动的事件监听器详解

    事件交互已经成为很多应用程序不可或缺的一部分,spring框架提供了一个完整的基础设施来处理瞬时事件.下面我们来看看Spring 4.2框架中基于注释驱动的事件监听器. 1.早期的方式 在早期,组件要 ...

随机推荐

  1. loading 动画效果(收藏起来以后留着慢慢用)

    动画效果一: html代码: <div class="spinner">   <div class="rect1"></div&g ...

  2. [原创]C语言里为何会有“2+2=5”的结果

    原文链接:C语言里为何会有“2+2=5”的结果 写这篇原创文章是因为看到了极客中的一篇文章<有趣各种编程语言实现2+2=5>,其中C语言是这样实现的: int main() { ″; // ...

  3. SQL Server save transaction

    准备: create table Nums(X int); 目的:只向表中插入一行. --------------------------------------------------------- ...

  4. 在Windows平台下安装与配置Memcached的方法分享

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态.数据库驱动网站的速度.Memcached ...

  5. 与ARM7相比Cortex-M3优势明显

  6. QWebView 显示本地HTML 文件

    QWebView 显示本地HTML文件的时候,如果直接使用 webView->load(QUrl(QString("file:///c:\\a.html")); 可能会导致a ...

  7. ADB几种常见的错误及解决方法

    下面列举出几种常见的错误及解决方法. Q1:无效的安装包,安装包已损坏[INSTALL_FAILED_INVALID_APK] A1:请检查安装包是否完整.如果是xpk包,可以通过 手动安装xpk来检 ...

  8. css之float

    在 HTML中的所有对象,默认分为两种:块元素(block element).内联元素(inline element),虽然也存在着可变元素,但只是随上下文关系确定该元素是块元素或者内联元素. 其实C ...

  9. express手工实现session原理

    var express = require('express'); var cookieParser = require('cookie-parser'); var bodyParser = requ ...

  10. 使用PHP实现请求响应和MySql访问

    在iOS开发当中经常需要使用来自后台的数据,所以使用一种很简便的写后台的方法. 首先,安装XAMPP,这是一个集成好的阿帕奇+MySQL环境,点击按钮即可开启服务,不需要进行任何环境配置. 然后,开启 ...