在 WPF 中的布局模型里面,可以将每个元素都认为是矩形。而每个矩形都可以将自己的左上角作为原点建立坐标,不同的矩形之间的坐标原点不相同,当这些用矩形表达的元素进行系列的旋转和平移等之后,如何将以某个元素的矩形左上角为原点的坐标换算为另一个元素的矩形左上角为原点的坐标

只要在相同的视觉树上面,所有的元素的矩形范围都能通过矩阵计算换算出来,在 WPF 和 UWP 里面都在每个元素提供了 TranslatePoint 方法,这个方法的作用就是用当前元素的左上角为原点的坐标换算为这个点在传入的元素的坐标,或者说将传入的点相对于视觉树最顶层的坐标不变的前提下,计算出如果放在传入元素里面应该的坐标是多少

如我有一个 Canvas 和 Canvas 里面有一个矩形,我对矩形做了一些复杂的变换,包括设置他的 Margin 和 Canvas.Left 的值,我想要了解这个矩形相对于Canvas的坐标在哪?其实这个问题可以转换为求在矩形坐标中,点(0,0)在 Canvas 上的值是多少

因为求一个元素相对于另一个的元素的坐标,也就是求元素左上角所在另一个元素的坐标,而一个元素的左上角就是通过以元素的左上角为原点的坐标也就是点 (0,0) 在屏幕坐标不变前提下,以另一个元素的左上角为原点的坐标点在哪

        <Canvas x:Name="Canvas"><Rectangle x:Name="Rectangle" Margin="10,10,10,10" Width="100" Height="100"Canvas.Left="-5" Fill="Black"></Rectangle></Canvas>

可以通过在 Rectangle 的 TranslatePoint 方法里面传入点 (0,0) 和需要换算的对应的另一个元素 Canvas 对象,就能返回传入的点在画布中的坐标

        private void MainWindow_Loaded(object sender, RoutedEventArgs e){var point = Rectangle.TranslatePoint(new Point(), Canvas);Debug.WriteLine(point);}

在元素的TranslatePoint方法里面,第一个参数传入的点是相对于当前元素的左上角为原点的坐标,而第二个值就是将要转换坐标的元素。计算方法就是将传入的点换算为传入的转换坐标的元素的左上角原点的坐标

计算原理是什么?其实小伙伴可以尝试画两个矩形,在其中一个矩形里面点一个点,然后求这个点在使用另一个矩形的左上角作为原点时的坐标,这是一道特别简单的初中数学

本文代码放在github欢迎小伙伴访问

更多请看 WPF使用TransformToAncestor获取元素的相对坐标_网络_sinat_31608641的博客-CSDN博客

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。


http://www.taodudu.cc/news/show-5219500.html

相关文章:

  • 折半查找表中的偶数问题
  • 16_OpenCV实现查找表变换
  • OpenCV查找表应用
  • 常用波特率计数查找表
  • c266 设置邮箱_C226机器设置ip-C226-柯尼卡美能达(查看)
  • 在plsql里面怎么去掉空行_利用Word搞定
  • c语言怎么去掉空白行,多种方法求解去掉空格 (三两行代码---适合初学者)
  • linux去掉文件空行,linux下删除文本的空行
  • linux怎么vi文件后删除空行,Vim 如何删除或替换空行空格
  • python字符串去掉空行_Python从字符串中删除空格
  • Java中删除String中空格的多种方法
  • 用机器学习提升WebRTC视频质量评估的正确姿势
  • 04.ffmpeg视频质量测试--简单使用
  • 阿拉伯数字转中文(go语言实现)
  • 1563页Go语言中文文档,涵盖Go语言所有核心知识点,限时免费下载!
  • go中文网第二期培训教程
  • go语言 c# 混合编程 pdf,【C# 调用 Go 语言】0x1 Hello Golang-Go语言中文社区
  • 如何编写 android go 程序,轻松搭建基于go1.5开发Android应用的环境 | Go语言中文网 | Golang中文社区 | Golang中国...
  • oracle 脚本go,Golang连接Oracle-Go语言中文社区
  • 3.Go语言变量与常量
  • 湖南大学.大学物理实验44:密里根油滴实验
  • 计算机仿真油滴实验好做吗,十大经典物理实验 | 油滴实验
  • 大学物理的密里根油滴实验的数据处理MATLAB程序!~一键直达结果,方便快捷(浙大)
  • ESP32/ESP8266安装arduino开发板失败的方法(附合宙esp32用blinker固件连接小爱同学提示“要操作的设备好像出问题了等一会再试吧”的解决方法
  • 目标、泳道、时序管理三步法(附合译看板)
  • 附合导线计算软件_AI 可以在 6 小时内设计出计算机芯片?谷歌这项研究厉害了...
  • OFDM子载波频率 知乎_5G新在哪儿(14)-NSA模式下测量机制与系统间互操作
  • DNA甲基化重编程为红梨中光诱导的花青素生物合成提供了见解
  • 5G基础知识及试题
  • 大唐杯5G练习题(一)

WPF 使用 TranslatePoint 换算元素之间相对坐标相关推荐

  1. (一)数据结构的起源,常见的名词解释,数据元素之间的关系

    何为数据结构? 待处理的数据以及数据之间的关系 数据元素之间一种或多种特定关系的集合 数据结构的起源 一开始计算机是计算数值用的,所以当人们使用计算机解决实际问题的时候,首先需要从具体问题中抽象出一个 ...

  2. pandas使用pct_change计算数据列的百分比变化、环比变化率:计算当前元素和前一个元素之间的百分比变化、使用style函数指定format的格式:百分比、缺失值替换、用颜色标注极大值和极小值

    pandas使用pct_change计算数据列的百分比变化.环比变化率:计算当前元素和前一个元素之间的百分比变化.使用style函数指定format的格式:百分比.缺失值替换.用颜色标注极大值和极小值 ...

  3. pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)

    pandas使用pct_change函数计算当前元素和前一个元素之间的百分比变化:默认情况下pct_change函数计算与紧邻前一行相比的百分比变化.计算当前元素和前一个元素之间的百分比变化(包含Na ...

  4. bootstrap4 调整元素之间距离

    https://blog.csdn.net/jianye5461/article/details/79463014 影响元素之间的间距是可以通过style的margin或padding属性来实现,但这 ...

  5. 如何删除内联块元素之间的空间?

    鉴于此HTML和CSS: span { display:inline-block; width:100px; background-color:palevioletred; } <p> & ...

  6. 051_元素之间空白间隙解决方案

    1. 元素li和li之间, 以及多个图片直接会有一段空白的, 空白符会造成元素显示有间隙.消除间隙就不能有空白符.不留空白代码格式又显得糟糕. 2. 我们有消除间隙小窍门, 在元素的父容器中设置: f ...

  7. css margin-top设置html元素之间的距离

    css margin-top属性设置的是一个元素的顶端与另一个元素之间的距离.这个距离称为上外边距,本文章向大家介绍css margin-top属性的用法和实例,需要的朋友可以参考一下. css ma ...

  8. 「 每日一练,快乐水题 」2016. 增量元素之间的最大差值

    文章目录 ✅力扣原题: ✅题目简述: ✅解题思路: ✅C++代码: ✅结果展示: ✅力扣原题: 力扣链接:2016. 增量元素之间的最大差值 ✅题目简述: 给你一个下标从 0 开始的整数数组 nums ...

  9. java 数组中差值最大数对,[算法题] 求数组有序后相邻元素之间的最大差值

    1. 题目要求 给定无序数组(此数组是long类型的数组,但以下示例只列一些小一点的数),例如: [3, 1, 12, 9, 3, 7, 1, 4, 7, 8, 10] 求数组有序后相邻元素之间的最大 ...

最新文章

  1. 对家庭网络设备行业的理解
  2. nav 计算机网络_CTO下载-计算机网络课件(配套韩立刚老师课程).ppt
  3. PHP的SPFA,由于是之前的c代码,风格你懂的........(夹带php队列实现)
  4. 作者:桑基韬(1985-),男,博士,中国科学院自动化研究所副研究员
  5. DIV CSS在不同IE版本和FF以及Chrome中的兼容性差异解决方法(推荐)
  6. 万圣节海报素材PSD分层模板
  7. 泸州NGN属南气矿工程----N2000网管系统提示连接数据库失败
  8. Spring.net 容器注入是替换(后处理器appConfigPropertyHolder)
  9. 基于JavaMail的Java邮件发送:复杂邮件发送
  10. html5指标源码,通达信牛股起爆点副图指标
  11. python12306学生票抢票脚本下载_Python 12306抢火车票脚本 Python京东抢手机脚本
  12. VSCode_VS2019体验背景靓图
  13. [复变函数]第24堂课 6.3 辐角原理
  14. 计算机考试不在学籍库,有消息!中考报名将由学籍库直接导入,取消学校考试排名........
  15. 10个副业兼职创业,在家赚钱绝对真实
  16. 举例说明神经网络在人工智能的应用
  17. 普通话水平测试软件异错词,最新普通话水平测试易错词语
  18. 基于C#弹幕类射击游戏的实现——(五)主场景
  19. admin_move_table的重组机制验证(失败了)
  20. python处理期货数据分析_量化交易分析第一步利用Tushare轻松获取股票期货行情数据...

热门文章

  1. 牛逼的文案,个个都是金句,爆款的文章,一定会有几个金句。好看的文案,一定有一个金句。...
  2. 柒点哥丨普通人如何快速写出闲鱼爆款文案?分享一套价值6000+的万能公式!
  3. 163邮箱是网易邮箱吗?邮件怎么登录呢?
  4. THINKPHP图片处理之图片合成,分享海报合成
  5. java keytool 导出证书_使用keytool 生成证书
  6. 《Python Spark 2.0 Hadoop机器学习与大数据实战_林大贵(著)》pdf
  7. 30天自制操作系统——第12-13天实验总结
  8. 电力载波通信模块JST-HPLC-S-FB在物联网通信领域的应用
  9. 基于C/S系统的考试系统
  10. android蹒跚学步