获取不规则图片的点击事件,

如果一个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相关推荐

  1. WPF命中测试示例(一)——坐标点命中测试

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

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

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

  3. VC++ 鼠标非显示区域命中测试消息WM_NCHITTEST和相关编程问题学习1

    此消息代表非显示区域命中测试:非显示区域,应该指窗口客户区以外的区域: 这个消息优先于所有其他的显示区域和非显示区域鼠标消息:其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用 ...

  4. WPF UIAutomation测试套件开发

    目录 介绍 目标 测试方案 功能测试(黑匣子) 测试示例 设计 记录测试并生成测试方法 更新测试方法并构建 测试用例规范 测试方法 初始化方法 实现自定义TestContext 测试配置 关于Code ...

  5. linux下缓存命中测试,Linux 性能优化实战(倪朋飞)---查看缓存命中情况

    cachestat 提供了整个操作系统缓存的读写命中情况. cachetop 提供了每个进程的缓存命中情况.但是,cachetop 并不把直接 I/O 算进来. 安装 cachestat.cachet ...

  6. linux下缓存命中测试,linux为什么报表缓存缓存未命中?_linux_开发99编程知识库...

    在我的系統里 Intel Xeon X5570 @ 2.93 GHz 我能夠通過請求這些事件來獲得 perf stat 報告緩存引用和缺失perf stat -B -e cache-reference ...

  7. Flutter事件响应源码分析

    Flutter作为一个UI框架,本身也有自己的事件处理方式,本文主要阐述触摸事件从native传递到Flutter后是如何被widget识别以及分发的.至于native系统是如何监听触摸事件以及传递事 ...

  8. 2019-6-15-WPF-触摸到事件

    title author date CreateTime categories WPF 触摸到事件 lindexi 2019-06-15 08:58:54 +0800 2018-8-10 11:1:5 ...

  9. C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(二十五)完美捕捉精灵之神器 -- HitTest...

    怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事. 为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经 ...

最新文章

  1. 为什么要参加java培训?有哪些优势?
  2. JAVscript对象
  3. python装饰器函数-python装饰器1:函数装饰器详解
  4. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情
  5. 搭建基于asp.net的wcf服务,ios客户端调用的实现记录
  6. 渗透测试初学者_渗透测试许可证:面向初学者的道德黑客课程
  7. leetcode141 环形链表
  8. Docker使用Dockerfile构建镜像
  9. iOS开发:remove reference与move to trash的区别
  10. 优秀java程序员-利器-eclipse-01 快捷键
  11. C++ stack(STL stack)
  12. 易语言c编译,易语言命令行编译工具免费版下载_易语言命令行编译工具最新版下载_3DM软件...
  13. 冒泡排序java简单实现
  14. 正方形面积圆形面积Java
  15. sql server 备份mysql_SQL Server远程数据库操作(备份、还原等)
  16. 在word中公式太长,用公式编辑器怎样设置才能自动换行?
  17. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...
  18. 使用国内的镜像源搭建 kubernetes(k8s)集群
  19. Cesium实时目标跟踪最新特效教程系列1—实时发亮直线跟踪移动目标
  20. Figma#1: 图形绘制

热门文章

  1. c++ explicit关键字_聊一聊 C++的特性 explicit 匿名空间
  2. 初学Vue.js--数据绑定与文本插值
  3. dpdk对虚拟化的支持调研
  4. Linux 命令详解(二)awk 命令
  5. magento模板 -- 如何安装magento模板
  6. Cypher查询语言--Neo4j-WHERE(三)
  7. 数码管流动显示(自己的单片机)
  8. 生活随笔:大学需要确立自己的方向
  9. ASP.NET 视频截图功能的C#代码
  10. 从别的地方转来的 网址