WPFの获取任意元素的位置

简介: 原文:WPFの获取任意元素的位置如果布局在Grid中: 方法一:  //_stackPanel为子元素,_grid为父元素  Point point = _stackPanel.TranslatePoint(new Point(0, 0), (UIElement)_grid);  方法二:  /...
原文: WPFの获取任意元素的位置

如果布局在Grid中:

方法一:
  //_stackPanel为子元素,_grid为父元素
  Point point = _stackPanel.TranslatePoint(new Point(0, 0), (UIElement)_grid);搜索
  
方法二:
  //_stackPanel为子元素,_grid为父元素
  GeneralTransform generalTransform = _stackPanel.TransformToAncestor(_grid);
  Point point = generalTransform.Transform(new Point(0, 0));

如果布局在Canvas中:

可以通过panel.SetLeft等绝对布局,panel.GetLeft等获取绝对布局

如果是鼠标在控件的位置:

Mouse.GePosition()

                   [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)点的相对位置,即元素的相对位置

目录
相关文章
|
6月前
|
前端开发 C# Windows
WPF/C#:如何实现拖拉元素
WPF/C#:如何实现拖拉元素
74 0
|
C# 前端开发
WPF如何得到一个在用户控件内部的元素的坐标位置
原文:WPF如何得到一个在用户控件内部的元素的坐标位置 例如有这样一个用户控件: 这是主窗口: ...
1447 0
|
C#
WPF 元素相对另外一个元素的 相对位置
原文:WPF 元素相对另外一个元素的 相对位置 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/koloumi/article/details/74011083 在实际使用WPF后知道它确实很便捷同时布局也很方便,总之处理的都是很不错特别是数据绑定。
857 0
|
C#
WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)
原文:WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆) 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1275 0
|
C# 索引
WPF中元素拖拽的两个实例
原文:WPF中元素拖拽的两个实例   今天结合之前做过的一些拖拽的例子来对这个方面进行一些总结,这里主要用两个例子来说明在WPF中如何使用拖拽进行操作,元素拖拽是一个常见的操作,第一个拖拽的例子是将ListBox中的子元素拖拽到ListView的某一个节点,从而将该子元素作为当前节点的子节点。
1223 0
|
C#
[WPF]获取鼠标指针下的元素
原文:[WPF]获取鼠标指针下的元素                                              [WPF]获取鼠标指针下的元素                                                         周银辉 以前写过一些GetElementUnderMouse之类的函数,要用到坐标换算而显得有些麻烦(特别是当元素有XXXTransform的时候) 今天看到Mouse类居然有一个DirectlyOver属性,可以获得鼠标下的元素, 很奇怪,我的MSDN文档以及VS2008智能提示中都没有显示该属性,但反编译一下可以看到。
1197 0
|
C# 容器 存储
WPF元素绑定
原文:WPF元素绑定 数据绑定简介:数据绑定是一种关系,该关系告诉WPF从源对象提取一些信息,并用这些信息设置目标对象的属性。目标属性是依赖项属性。源对象可以是任何内容,从另一个WPF元素乃至ADO.NET数据对象(如DataTable)或自行创建出数据对象。
888 0
|
C#
【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?
原文:【msdn wpf forum翻译】如何在wpf程序(程序激活时)中捕获所有的键盘输入,而不管哪个元素获得焦点?原文链接:http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/cf884a91-c135-447d-b16b-214d2d9e9972 有时有些特殊的程序需要这样处理。
989 0
|
C#
【msdn wpf forum翻译】获取当前窗口焦点所在的元素
原文:【msdn wpf forum翻译】获取当前窗口焦点所在的元素原文地址: http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/6bd7a03a-f0b4-42df-a7f2-5182cf003cb0 Bialgous回答:IInputElement focusedElement = FocusManager.
1004 0
|
C#
在WPF中减少逻辑与UI元素的耦合
原文:在WPF中减少逻辑与UI元素的耦合              在WPF中减少逻辑与UI元素的耦合 周银辉 1,    避免在逻辑中引用界面元素,别把后台数据强加给UI  一个糟糕的案例 比如说主界面上有一个显示当前任务状态的标签label_TaskState,我们会时常更新该标签以便及时地将任务状态通知用户。
1058 0