WPF——关于控件显示坐标与通过PointToScreen拿到的不一致的问题?
创始人
2025-06-01 09:10:44
0

一、问题描述

利用Grid定义列将其分成三列,为每列填充元素,元素为自定义控件,即通过Generic声明样式,继承基类控件实现类的行为和方法。此时,元素的通过`HorizontalAlignment被赋值Left或Right,但未对VerticalAlignment赋值,导致其垂直对齐方式为拉伸填充,虽然其样式内部设置了宽高。此时元素通过PointToScreen获取屏幕坐标,得到的并非其实际显示的坐标。

二、知识查阅

  1. 一些对齐方式的依赖属性?
    HorizontalAlignment/VerticalAlignment,指自身相对于父元素的位置
    HorizontalContentAlignment/VerticalContentAlignment,指子元素在自身元素中的相对位置
  2. VerticalAlignment 与 HorizontalAlignment的默认值是什么?
    两个属性的值可以是Stretch、Left、Right、Top、Bottom、Center。默认值为Stretch,即元素将会在其可用空间内拉伸以填充其父元素。
  3. Stretch何时起作用?
    如果元素设置了固定宽高,那么Stretch将不会影响其显示。如果元素的AlignmentLeft、Right、Top、Bottom、Center任意值,Stretch则不起作用。另外,如果你想元素保持原始宽高比展示,可以将其Stretch属性设为Uniform/UniformToFill
  4. 为什么Stretch会导致控件显示坐标与获取不一致的问题?
    其实并非控件显示坐标与获取不一致,而是获取的控件坐标实际是外层的Grid,对齐方式使用了Stretch导致元素对可用空间进行拉伸填充,而元素内部虽然指定了宽高不影响其显示,但借助控件x:Name得到的元素依旧是外层的Grid而不是控件模板内部的元素。

三、问题复现

  1. 直接运行程序,得到的rec1是外层Grid拉伸后的实际坐标;
  2. 如果为rec1的Grid定义 VerticalAlignment="Center",得到的rec1是内层粉红色矩形的实际坐标;因为其保证了rec1不是以拉伸方式填充可用空间。
  3. 如果为rec1的Grid定义 Width="100" Height="100",得到的rec1也是内层粉红色矩形的实际坐标;因为其已经有了固定大小,Strech将不会影响其显示。但是如果对内部Grid定义 `Width=“100” Height="100"将不起作用,因为rec1.PointToScreen()获取的是外层,即其本身的实际坐标。

四、反思与总结

对于自定义内部控件,在使用的时候还是需要指定其水平对齐方式和垂直对齐方式,即HorizontalAlignment/VerticalAlignment;如果没有指定,将会导致对齐方式使用Stretch方式对可用空间进行拉伸。尽管控件样式内部定死的宽高,但还是无法保证定义控件外层的Grid不被拉伸,即表面上看是获取了显示控件的实际位置,其实是获取wpf为自定义控件创建的一个隐形Grid的实际位置。

五、参考资料

对齐方式、边距和填充概述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...