WPF命中测试示例(二)——几何区域命中测试
接续上次的命中测试,这次来做几何区域测试示例。
示例
首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置:

当前设计视图界面如下:

接下来,转到窗体的“Window_Loaded”事件处理函数,编写函数代码:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Random r = new Random();
for (int i = 0; i < 800; i++)
{
var o = new Ellipse();
o.HorizontalAlignment = HorizontalAlignment.Left;
o.VerticalAlignment = VerticalAlignment.Top;
o.Margin=new Thickness(){ Left = r.Next((int)this.Width),Top = r.Next((int)this.Height)};
o.Height = o.Width = r.Next(10);
o.Fill = new SolidColorBrush(new Color() { A = (byte)r.Next(255), R = (byte)r.Next(255), G = (byte)r.Next(255), B = (byte)r.Next(255) });
root.Children.Add(o);
}
}
代码的功能是在界面中随机分布800个不同色彩的小圆点,我们来编译运行看看效果:

现在,我们需要在按钮点击时,将中间200×150椭圆区域内的小圆点变成黑色。
编写按钮点击事件处理函数如下:
private void button1_Click(object sender, RoutedEventArgs e)
{
VisualTreeHelper.HitTest(root, null, f =>
{
var o = f.VisualHit as Ellipse;
if (o != null) o.Fill = new SolidColorBrush(Color.FromArgb(255, 0, 0, 0));
return HitTestResultBehavior.Continue;
}, new GeometryHitTestParameters(new EllipseGeometry(new Point(this.Width / 2, this.Height / 2), 200, 150)));
}
这里的HitTestParameters就采用了GeometryHitTestParameters,传入一个几何图形作为命中测试区域。
编译运行效果:

下载
源代码:http://www.uushare.com/user/icesee/file/3024856
本文的XPS版本:http://www.uushare.com/user/icesee/file/3024874
WPF命中测试示例(二)——几何区域命中测试的更多相关文章
- WPF命中测试示例(一)——坐标点命中测试
原文:WPF命中测试示例(一)--坐标点命中测试 命中测试也可被称为碰撞测试,在WPF中使用VisualTreeHelper.HitTest()方法实现,该方法用于获取给定的一个坐标点或几何形状内存在 ...
- Android测试(二):Android测试基础
原文地址:https://developer.android.com/training/testing/fundamentals.html 用户在不同的级别上与你的应用产生交互.从按下按钮到将信息下载 ...
- WPF入门教程系列二十三——DataGrid示例(三)
DataGrid的选择模式 默认情况下,DataGrid 的选择模式为“全行选择”,并且可以同时选择多行(如下图所示),我们可以通过SelectionMode 和SelectionUnit 属性来修改 ...
- WPF换肤之二:可拉动的窗体
原文:WPF换肤之二:可拉动的窗体 让我们接着上一章: WPF换肤之一:创建圆角窗体 来继续. 在这一章,我主要是实现对圆角窗体的拖动,改变大小功能. 拖动自绘窗体的步骤 首先,通过上节的设计,我们知 ...
- java-redis列表数据操作示例(二)
接上篇博文<java-redis字符类数据操作示例(一)>,redis连接管理类的代码请跳转查看. 一.列表类型缓存测试类 public class ListTest { /** * 主测 ...
- Python+Selenium笔记(十二):数据驱动测试
(一) 前言 通过使用数据驱动测试,实现对输入值和预期结果的参数化.(例如:输入数据和预期结果可以直接读取Excel文档的数据) (二) ddt 使用ddt执行数据驱动测试,ddt库可以将测试 ...
- Leetcode 304.二维区域和检索-矩阵不可变
二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). 上图子矩阵左上角 (row1, c ...
- 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用
目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...
- Java实现 LeetCode 304 二维区域和检索 - 矩阵不可变
304. 二维区域和检索 - 矩阵不可变 给定一个二维矩阵,计算其子矩形范围内元素的总和,该子矩阵的左上角为 (row1, col1) ,右下角为 (row2, col2). Range Sum Qu ...
随机推荐
- KMP poj
题目来自:http://www.cnblogs.com/wuyiqi/archive/2012/01/06/2315188.html KMP算法开始是判断字符串b是否是字符串a的子串,朴素的算法是枚举 ...
- win2003的IIS無法使用,又一次安裝提示找不到iisadmin.mfl文件
我的系統是win2003 繁體版 sp2,現在iis無法使用,我同事的也是,也不知道是不是跟在網域中有關係,因為我用虛擬機的繁體系統win2003 R2版iis能够正常使用,不過曾经那台電腦也是在網域 ...
- SAP自带的创建报表工具
SAP自带的工具有quickview和query两个主要的工具,当然还有其他的 quickview和query的区别主要是query支持系统之间的传输,quickview只能是用户的客户端创建使用,不 ...
- Delphi中获取某类的祖先类及其所在单元名称(使用GetTypeData(PClass.ClassInfo)函数,并且该类是从TPersistent类的派生类才可以这么使用)
前几天在CSDN社区看到一篇<如何得到自身单元名称>的帖子,其中一位名为sdzeng网友给出了答案.受此启发,自己写了一个函数,用来获取指定类的所有祖先类的名称及其所在的单元名称. //参 ...
- Mysql对自增主键ID进行重新排序
Mysql数据库表的自增主键ID号经过一段时间的添加与删除之后乱了,需要重新排列. 原理:删除原有的自增ID,重新建立新的自增ID. 1,删除原有主键: ALTER TABLE `table_name ...
- Win32环境下的程序崩溃异常定位
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- poj 3623 Best Cow Line, Gold
题目不算难,但是不认真想的话很容易wa,我就是wa了多次才意识到自己想法存在的缺陷. 相同的时候往后找知道出现不相同时,只能判断出当前字符的优先顺序. 这个题目如果朴素的按照这种方法做的话复杂度其实是 ...
- IE7IE8兼容性设置_服务器端设定
用ASP.NET开发的web程序,客户端是IE7以上时,需要设置IE的兼容性,否则web页面可能混乱,但这样在每客户端设置不太现实, 对策: ①在站点的配置文件中,修改web.config文件,使得该 ...
- KMP(Knuth-Morris-Pratt)算法
一.朴素匹配算法 也就是暴力匹配算法.设匹配字符串的长度为n,模式串的长度为m,在最坏情况下,朴字符串匹配算法执行时间为O((n - m + 1)m). 假设m = n / 2, 那么该算法的复杂度就 ...
- 模式识别 - 处理多个演示样本研究(MIL)特点(matlab)
处理多个演示样本研究(MIL)特点(matlab) 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27206325 多演示样例学习 ...