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

原文: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

时间: 2024-08-30 17:01:53

WPF命中测试示例(二)——几何区域命中测试的相关文章

WPF换肤之二:可拉动的窗体

原文:WPF换肤之二:可拉动的窗体 让我们接着上一章: WPF换肤之一:创建圆角窗体 来继续. 在这一章,我主要是实现对圆角窗体的拖动,改变大小功能. 拖动自绘窗体的步骤 首先,通过上节的设计,我们知道了如何设计一个圆角窗体,通过XAML代码量,我们发现设置这个窗体是多么的简单.但是如何让窗体能够进行Resize呢? 在Winform时代,我们通过WndProc(ref Message m)处理窗体界面消息来实现,那么在WPF中是否也是如此呢? 其实在WPF中,虽说封装比较紧密,但是对于处理界面

WPF入门教程系列二——Application介绍

原文:WPF入门教程系列二--Application介绍 一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离. 微

Ruby on rails开发从头来(windows)(二十四)-测试Controller

上篇随笔里介绍了rails在功能测试方面的一些约定.这次我们继续会到Controller的测试. 之前我们测试的是login,可以相见,用户在login以后就要开始进行购物的动作了,所以我们现在就来测试store_controller,我们先来测试index方法. 1.在index里,我们列出了所有的可以销售的书籍的列表,所以,这里我们要让store_controller来使用product.yml和orders.yml里的数据.现在来看看store_controller_test.rb文件,完

Patrick Copeland:Google如何进行测试 之二

在对Patrick Copeland的采访的第二部分,我们主要讨论了管理一个全球开发团队的挑战:食物刺激对程序员的作用:好的测试工程师和超nb测试工程师之间的区别:以及为何某些公司始终无法提供靠谱的软件. 问:管理一个跨越一打以上国家的团队有什么挑战?在这样的团队中管理人员.流程.产品有什么样的困难?还有,你一般几点睡觉? 答:"确保对人员的掌控"<谈到这个时他脸上挂着邪恶的微笑>不是Google的解决方案.实际上,我们的团队结构在业界是非典型的.首先,我们是扁平化架构,即

ViewTreeObserver示例(二)

main.xml如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="

探索性测试(四):探索性测试并不是快速测试

快速测试也是一种测试的方法,它既可以照本宣科的进行,亦可以探索的方式进行.尽管一个使用高度探索性方法进行测试的测试员可能会执行很多快速测试,而快速测试也通常是运用探索性测试方法时的重要因素.但是,快速测试和探索性测试并不是一样的. 快速测试是需要少量时间或一点精力去准备和执行的廉价测试.这类测试甚至不需要具备与待测试的应用程序相关的大量知识或相关的业务领域知识,但它们有助于快速地获取新的信息.快速测试不是强调广泛和完整,它的目的是用最低的成本快速揭示信息. 快速测试是了解产品.识别区域风险及薄弱

“让开发者爱上安全测试”系列之源码安全测试谁负责?

前言 顺着应用安全的发展,对于源代码安全测试,在源代码层面是进行安全漏洞的测试与防范,避免产生所谓的"0-day"漏洞,现在已是大家的共识,成为构建软件安全保障体系中必备环节.但我也常常听到有人抱怨"源代码安全测试很难开展,总是遇到这样那样的问题,分工不明,权责不清,配合变成对抗,最后导致虎头蛇尾,甚至是执行不下去,留以形势,无法产生实际作用. 那么今天我们就来讨论一下,企业内部怎样开展源代码安全测试?到底谁来负责源代码安全测试,才能使其有效地执行,事半功倍? 源代码安全测试

测试增删改时通过了测试,但是数据库中没有相应变化

问题描述 测试增删改时通过了测试,但是数据库中没有相应的变化.是因为没有提交事务,我已经配置'创建事务代理对象'和'自动事务代理'即<bean id="interceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">和 <bean class="org.springframework.aop.framework.autoprox

电缆测试仪测试参数详解:布线测试基础知识

目前应用最多的网络布线系统就是使用双绞线的布线系统,其中主流的选择是 超5 类或更高的性能的系统. 对于布线系统来说,安装人员进行的最最基本的测试就是使用连通性测试仪验 证链路端到端的连接.这些测试仪提供完整的接线图测试,使用TDR 技术测量长 度以及其他一些附加信息.这类仪器对于测试语音线路,快速检查数据链路以及 高速增长的住宅局域网布线市场是非常有帮助的. 用于布线系统验收的测试标准要求测量几个重要的电气参数以便于认证布线系 统满足一定的传输性能要求.有的测试在全世界范围内都是要进行的.每个