命中测试也可被称为碰撞测试,在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. angular路由传递参数_@medux 路由篇
  2. mysql中的字符匹配查询
  3. 复制到剪贴板的js代码(兼容ie、firefox、chorme、safari...什么都兼容!)
  4. 各种页面刷新代码大全,asp/javascript刷新页面代码
  5. VBox虚拟机仅主机模式时,出现connetct:Network is unreachable,解决方法
  6. discuz php如何开发,Discuzx2开发标准流程
  7. scp传输文件,自动填充密码
  8. TestNG中的参数化– DataProvider和TestNG XML(带有示例)
  9. 使用jclouds在S3上分段上传
  10. 数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化
  11. hertz接触理论_角接触轴承的组配和预紧技术及影响
  12. window.location和window.open的区别
  13. linux服务器分区方案
  14. php.ini添加的变量读取,PHP5 在扩展里使用 INI 指令(直接添加和配合全局变量两种方式)...
  15. Mariadb----字符类型 (五)
  16. 网络上复制网页文字的方法
  17. 手机网页form表单样式_超全面!13种表单样式的设计方式都在这了
  18. wps表格宏被禁用如何解禁_怎么解除宏禁用_win7系统取消宏已被禁用提示的方法...
  19. Python+Webdriver实现淘宝、京东等抢单操作
  20. js实现显示系统时间的表盘

热门文章

  1. py文件打包或apk_Python文件打包成exe很简单,如果安卓手机也能运行的软件你会吗...
  2. php如何word转html格式文件,PHP将上传word文件,转化为Html格式,(多种转换方式)
  3. mysql数据库回滚日志_Mysql数据库应急响应中日志排查
  4. java迭代器的使用场景_集合遍历利器 -- 迭代器模式 介绍 使用场景案例 优缺点及程序演示...
  5. c语言是一门对标识符大小写敏感的程序设计语言,《C语言程序设计》课程自测题...
  6. 三维动画属于计算机专业吗,三维动画设计专业属于文科还是理科
  7. 2021年人工神经网络第四次作业-第四题:旋转的数字
  8. 芝大教授: 博士培养正沦为“庞氏骗局”
  9. 用手指触碰电子,用心灵感受震荡
  10. 第十五届全国大学生智能车人工智能创意组复赛首批团队名单