命中测试也可被称为碰撞测试,在WPF中使用VisualTreeHelper.HitTest()方法实现,该方法用于获取给定的一个坐标点或几何形状内存在的视觉元素,此次我们的示例是坐标点命中测试。

示例

首先使用Microsoft Expression Blend 3创建一个新的WPF应用程序项目:

在窗体上随意绘制几个图形,这里分别使用了:Rectangle、Ellipse、Path元素。

在右下角绘制一个ListBox控件,命名为l1:

在视觉树面板中选中Window:

在属性面板中单击事件类别,然后再MouseUp事件右侧空白处双击以添加事件处理:

至此,前台XAML代码如下:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480" MouseUp="Window_MouseUp" mc:Ignorable="d">
<Grid x:Name="LayoutRoot">
<Rectangle Fill="#FFA9FF00" Stroke="Black" Margin="120.496,32.54,228.496,0" VerticalAlignment="Top" Height="164.92" RenderTransformOrigin="0.5,0.5">
<Rectangle.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="26.565"/>
<TranslateTransform/>
</TransformGroup>
</Rectangle.RenderTransform>
</Rectangle>
<Ellipse Fill="#FF00FFD0" Stroke="Black" HorizontalAlignment="Right" Margin="0,161,88,99" Width="152"/>
<Path Fill="#FF00E8FF" Stretch="Fill" Stroke="Black" HorizontalAlignment="Left" Margin="23.5,83,0,32.5" Width="283" Data="M316,69 L111.5,280.5 393.5,394.5 z"/>
<ListBox x:Name="l1" HorizontalAlignment="Right" VerticalAlignment="Bottom" Width="187" Height="197"/>
</Grid>
</Window>

编写后台事件处理代码为:

private void Window_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
l1.Items.Clear();
var p=e.GetPosition(sender as UIElement);
VisualTreeHelper.HitTest(this,null,f=>
{
l1.Items.Add(f.VisualHit.ToString());
return HitTestResultBehavior.Continue;
},new PointHitTestParameters(p));
}

这里的功能就是把坐标点位置交叠存在的所有视觉元素的ToString()形式显示到ListBox中。

其中 HitTestResultBehavior.Continue 是表示继续处理更深层的交叠的视觉元素,如果改为 Stop ,则只处理最表层的视觉元素。

在特定位置单击鼠标已进行测试:

  

下载

源代码:http://www.uushare.com/user/icesee/file/2991316

本文的XPS格式:http://www.uushare.com/user/icesee/file/2991317

本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/SkyD/archive/2010/05/10/1731646.html,如需转载请自行联系原作者

WPF命中测试示例(一)——坐标点命中测试相关推荐

  1. WPF命中测试示例(二)——几何区域命中测试

    接续上次的命中测试,这次来做几何区域测试示例. 示例 首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置: 当前设计视图界面如下: 接下来,转到窗体的"Windo ...

  2. rspec 测试页面元素_如何使用共享示例使您的RSpec测试干燥

    rspec 测试页面元素 by Parth Modi 由Parth Modi 如何使用共享示例使您的RSpec测试干燥 (How to DRY out your RSpec Tests using S ...

  3. wxWidgets:wxHtml 测试示例

    wxWidgets:wxHtml 测试示例 wxWidgets:wxHtml 测试示例 wxWidgets:wxHtml 测试示例 #include "wx/wxprec.h" # ...

  4. 关键字驱动测试示例_带有示例的False关键字

    关键字驱动测试示例 Python False关键字 (Python False keyword) False is a keyword (case-sensitive) in python, it i ...

  5. WPF获取相对位置、坐标的方法

    原文:WPF获取相对位置.坐标的方法 1.获取鼠标在控件中的坐标: 1 private void item_MouseDown(object sender, MouseButtonEventArgs ...

  6. 180多个Web应用程序测试示例测试用例

    180多个Web应用程序测试示例测试用例 假设:假设您的应用程序支持以下功能 各种领域的表格 儿童窗户 应用程序与数据库进行交互 各种搜索过滤条件和显示结果 图片上传 发送电子邮件功能 数据导出功能 ...

  7. C#使用Modbus协议读写汇川PLC的M区寄存器(测试示例),接上篇

    对汇川PLC采用Modbus-TCP进行读写寄存器测试示例 新建WinForms应用程序InovancePlcDemo,.net framework 4.5. 重命名窗体名为FormInovanceP ...

  8. JUnit5 @Disabled测试示例

    JUnit @Disabled注解可用于禁用测试套件中的测试方法. 该注解可以应用于测试类以及各个测试方法. 它仅接受一个可选参数,它指示此测试被禁用的原因. @Disabled的测试类 将@Disa ...

  9. 测试覆盖率统计工具_使用测试工具和方法进行测试覆盖率

    测试覆盖率统计工具 概述: 要定义"测试覆盖率",我们必须谈论以下主题: 测试覆盖的目的. 不同类型的测试覆盖率标准. 测试覆盖率指标 单元测试范围 测试覆盖率工具 测试覆盖范围的 ...

最新文章

  1. 找到那些新时代的“操作系统”
  2. ethereumjs/ethereumjs-util
  3. 线程池方式调用spring mvc的业务类的简单实例
  4. centos nginx离线安装
  5. android二级菜单ui,Android UI 之实现多级树形列表TreeView示例
  6. 【习题 6-7 UVA - 804】Petri Net Simulation
  7. PHP添加php-java-brideg模块(ubuntu环境)
  8. Java中从String到Long的转换
  9. wpsppt流程图联系效果_| JEAM | 文章精选:大城市收取交通拥堵费的影响与效果
  10. 【学习笔记】n皇后问题的解决方法+改进代码(回溯递归)
  11. 2020-08-17 java实战项目汇总
  12. 云计算学习——Overlay网络技术概述
  13. 思科、华为路由器破解过程
  14. python 计算标准体重程序
  15. formatter格式说明
  16. 想问问,数模小白三个月准备数模国赛,现实吗?
  17. (1)asp。net操作ftp,上传和下载 (2) 长时间提交,在提交后禁止页面按钮 (3) 方便的javascript日历
  18. 计算机伦理学理论分析三大思想,试论伦理学的三种理论形态——基于理论形态学的考察...
  19. 云天励飞在科创板获准注册:计划募资30亿元,陈宁为实际控制人
  20. mysql1598_mysql中主从复制中出现ERROR 1598 (HY000)错误

热门文章

  1. java list 截取部分数据_Java List.subList()方法:获取列表中指定范围的子列表
  2. php lumen auth,学习 Lumen 用户认证 (一)
  3. java bean销毁,销毁Spring Bean的三种方法
  4. 将之前写完的猜数字游戏改为通过javabean_有了这些互动小游戏,知识竞赛更精彩了...
  5. selenium 操作 html 5,[Selenium] WebDriver 操作 HTML5 中的 video
  6. mysql安装的根目录_MySql安装及基础配置(一)
  7. c保留小数点后三位数没有则为0_哪位老师整理的,这么齐全?赶紧存下为孩子期末考试助力...
  8. php静态方法调用变量吗,php静态方法怎么调用非静态变量?
  9. 微型角度编码器 : KYTB-1503-1024
  10. ACS712模块 ACS712ELCTR-05A电流传感器模块