WPF 命中测试HitTest
获取不规则图片的点击事件,
如果一个Canvas中,有很多图形,比如下图:矩形,菱形等。
如果每个图形都加一个点击事件,想要一个通用的方法,获取鼠标点击在了哪个图形上,这里可以使用VisualTreeHelper.HitTest方法。
直接看看示例代码:
MainWindow.xaml:
<Window x:Class="wpfcore.MainWindow"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"xmlns:local="clr-namespace:wpfcore" xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls"mc:Ignorable="d"Background="LightBlue"UseLayoutRounding="True"Title="MainWindow" Width="600" Height="340"><WrapPanel HorizontalAlignment="Center" VerticalAlignment="Center" Name="panel" MouseUp="mouseUp"><Path x:Name="矩形1" Margin="5" Fill="Red" Data="M0 0,100 0,100,100,0 100Z"/><Path x:Name="矩形2" Margin="-5" Fill="Green" Data="M0 0,100 0,100,100,0 100Z"><Path.RenderTransform><RotateTransform CenterX="50" CenterY="50" Angle="60"/></Path.RenderTransform></Path><Path x:Name="菱形1" Stroke="Red" Fill="Red"><Path.Data><PathGeometry><PathFigure IsClosed="True" StartPoint="50,0"><LineSegment Point="75,50"></LineSegment><LineSegment Point="50,100"></LineSegment><LineSegment Point="25,50"></LineSegment></PathFigure></PathGeometry></Path.Data></Path><Path x:Name="菱形2" Stroke="Red" Fill="Red"><Path.Data><PathGeometry><PathFigure IsClosed="True" StartPoint="50,0"><LineSegment Point="75,50"></LineSegment><LineSegment Point="50,100"></LineSegment><LineSegment Point="25,50"></LineSegment></PathFigure><PathGeometry.Transform><RotateTransform Angle="-115" CenterX="50" CenterY="100"></RotateTransform></PathGeometry.Transform></PathGeometry></Path.Data></Path></WrapPanel>
</Window>
MainWindow.cs:
using System;
using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;namespace wpfcore
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DataContext = this;}private void mouseUp(object sender, MouseButtonEventArgs e){var p = e.GetPosition(sender as UIElement);VisualTreeHelper.HitTest(panel, null, callback, new PointHitTestParameters(p));System.Diagnostics.Debug.WriteLine($"------------------------");}private HitTestResultBehavior callback(HitTestResult result){System.Diagnostics.Debug.WriteLine($"点击了{result.VisualHit.GetValue(NameProperty)}");return HitTestResultBehavior.Continue;}}
}
输出点击点在哪个图形内,当然,你也可以做别的事。
如果喜欢,点个赞呗~
WPF 命中测试HitTest相关推荐
- WPF命中测试示例(一)——坐标点命中测试
命中测试也可被称为碰撞测试,在WPF中使用VisualTreeHelper.HitTest()方法实现,该方法用于获取给定的一个坐标点或几何形状内存在的视觉元素,此次我们的示例是坐标点命中测试. 示例 ...
- WPF命中测试示例(二)——几何区域命中测试
接续上次的命中测试,这次来做几何区域测试示例. 示例 首先新建一个WPF项目,在主界面中拖入一个按钮控件,并修改代码中的以下高亮位置: 当前设计视图界面如下: 接下来,转到窗体的"Windo ...
- VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1
此消息代表非显示区域命中测试:非显示区域,应该指窗口客户区以外的区域: 这个消息优先于所有其他的显示区域和非显示区域鼠标消息:其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用 ...
- WPF UIAutomation测试套件开发
目录 介绍 目标 测试方案 功能测试(黑匣子) 测试示例 设计 记录测试并生成测试方法 更新测试方法并构建 测试用例规范 测试方法 初始化方法 实现自定义TestContext 测试配置 关于Code ...
- linux下缓存命中测试,Linux 性能优化实战(倪朋飞)---查看缓存命中情况
cachestat 提供了整个操作系统缓存的读写命中情况. cachetop 提供了每个进程的缓存命中情况.但是,cachetop 并不把直接 I/O 算进来. 安装 cachestat.cachet ...
- linux下缓存命中测试,linux为什么报表缓存缓存未命中?_linux_开发99编程知识库...
在我的系統里 Intel Xeon X5570 @ 2.93 GHz 我能夠通過請求這些事件來獲得 perf stat 報告緩存引用和缺失perf stat -B -e cache-reference ...
- Flutter事件响应源码分析
Flutter作为一个UI框架,本身也有自己的事件处理方式,本文主要阐述触摸事件从native传递到Flutter后是如何被widget识别以及分发的.至于native系统是如何监听触摸事件以及传递事 ...
- 2019-6-15-WPF-触摸到事件
title author date CreateTime categories WPF 触摸到事件 lindexi 2019-06-15 08:58:54 +0800 2018-8-10 11:1:5 ...
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...
怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经 ...
最新文章
- 为什么要参加java培训?有哪些优势?
- JAVscript对象
- python装饰器函数-python装饰器1:函数装饰器详解
- JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
- 搭建基于asp.net的wcf服务,ios客户端调用的实现记录
- 渗透测试初学者_渗透测试许可证:面向初学者的道德黑客课程
- leetcode141 环形链表
- Docker使用Dockerfile构建镜像
- iOS开发:remove reference与move to trash的区别
- 优秀java程序员-利器-eclipse-01 快捷键
- C++ stack(STL stack)
- 易语言c编译,易语言命令行编译工具免费版下载_易语言命令行编译工具最新版下载_3DM软件...
- 冒泡排序java简单实现
- 正方形面积圆形面积Java
- sql server 备份mysql_SQL Server远程数据库操作(备份、还原等)
- 在word中公式太长,用公式编辑器怎样设置才能自动换行?
- 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...
- 使用国内的镜像源搭建 kubernetes(k8s)集群
- Cesium实时目标跟踪最新特效教程系列1—实时发亮直线跟踪移动目标
- Figma#1: 图形绘制