好奇求知 积极热忱 善用资源 勇于责任 团队协作 恪守承诺 开放大度 激励奋发
                
                想象:
我们将想象化为实际行动,为客户、大众和社区工作
                解决:我们协助解决一些世界上最棘手的问题
                营造:我们推崇企业文化,拓展市场、培养人才、为股东创造价值
                领先:我们唯才是用,以学习进取、兼容并蓄、求新求变的精神保持企业领先

                GE: Imagination at work

[WPF]获取控件间的相对位置

                   [WPF]获取控件间的相对位置
                            周银辉

我们知道WPF有着比较灵活的布局方式,关于某个控件的坐标,Canvas中的元素最简单,我们可以直接通过其GetLeft()与GetTop方法来获取,但其它布局面板中的,以及存在于不同布局面板中的元素中间的相对位置就比较让我们头疼了,其实有简单方法的,不知你有没发现。

1,获取元素相对于父控件的位置
使用Vector VisualTreeHelper.GetOffset(Visual visual)方法,其会返回visual在其父控件中的偏移量,然后你再将返回值的Vector对象转换成Point对象就可以了

2,获取元素相对于祖宗控件或子孙控件的位置
使用元素的 GeneralTransform TransformToAncetor(Visual ancetor)方法与GeneralTransform TransformToDescendent(Visual descendent),其返回元素相对于祖宗或子孙的GeneralTransform myGeneralTransform ,然后再使用Point thePoint= myGeneralTransform.Transform(new Point(0,0))得到的thePoint对象就是要找的值了。

3,获取任意两个元素见的相对位置
有两种方式:
如果元素是Visual,可以使用元素的GeneralTransform TransformToVisual(Visual visual)方法,然后可以与上文第2点的方法从GeneralTransform 得到thePoint
如果元素是UIElement,就更简单了,可以使用元素的TranslatePoint(Point pt, UIElement relativeTo)来得到元素上的pt点相对于relativeTo时的值,只有我们传入的pt为(0,0)那么就可以得到元素上(0,0)点的相对位置,即元素的相对位置

posted on 2008-03-20 17:29 周银辉 阅读(2477) 评论(4)  编辑 收藏 所属分类: WPF

评论

#1楼  2008-03-21 09:23 一瞬间      

支持一个。楼主能加个好友吗,向你学习讨论:)
  回复  引用  查看    

#2楼  2008-03-21 14:53 Brilliance_DaveLin      

不错,很实用的技术!   回复  引用  查看    

#3楼  2008-03-21 14:54 Brilliance_DaveLin      

希望能有更多好的作品,以后也能把这些技巧集中起来出版一下,将WPF进行到底!!!   回复  引用  查看    

#4楼 [楼主] 2008-03-21 16:51 周银辉      

@一瞬间
@Brilliance_DaveLin
@Brilliance_DaveLin
谢谢,加油吧:)   回复  引用  查看    

导航

公告

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

搜索

 

常用链接

留言簿(79)

我参加的小组

我参与的团队

随笔分类(174)

随笔档案(165)

友情链接

积分与排名

最新随笔

阅读排行榜