WPFの获取任意元素的位置

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/9941806.html

时间: 2024-08-02 12:47:02

WPFの获取任意元素的位置的相关文章

WPF 获取鼠标屏幕位置、窗口位置、控件位置

原文:WPF 获取鼠标屏幕位置.窗口位置.控件位置 public struct POINT { public int X; public int Y; public POINT(int x, int y) { this.X = x; this.Y = y; } } [DllImport("user32.dll")] public static extern bool GetCursorPos(out POINT lpPoint); //e.GetPosition(this); //(e

WPF获取屏幕分辨率

转自:http://blog.csdn.net/w8666666/article/details/8190002 double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度double y = SystemParameters.WorkArea.Height;//得到屏幕工作区域高度double x1= SystemParameters.PrimaryScreenWidth;//得到屏幕整体宽度double y1 = SystemParamet

XAML: 获取元素的位置

原文:XAML: 获取元素的位置 在之前讨论 ListView 滚动相关需求的文章中(UWP: ListView 中与滚动有关的两个需求的实现)曾经提到了获取元素相对位置的方法,即某元素相对另一元素的位置.现将所有相关方法再作整理,并且包括 UWP 与 WPF 两者的实现,如下: WPF(两种方式): GeneralTransform generalTransform = controlB.TransformToVisual(controlA); Point point = generalTra

WPFの获取屏幕分辨率并自适应

原文:WPFの获取屏幕分辨率并自适应 double x = SystemParameters.WorkArea.Width;//得到屏幕工作区域宽度 double y = SystemParameters.WorkArea.Height;//得到屏幕工作区域高度 double x1= SystemParameters.PrimaryScreenWidth;//得到屏幕整体宽度 double y1 = SystemParameters.PrimaryScreenHeight;//得到屏幕整体高度

UIWebView之获取所点位置的图片标签和src

UIWebView有自己的UIResgure,如果我们手动加入自己的GestureRecognize将不能识别,如UILongPressGestureRecongnizer. 在浏览网页的时候,如果看到喜欢的图片,想把它保存下来如何办呢? 我们可以自己写一个程序来实现,用uiwebview开发一个自己的浏览器. 上面说到uiwebview不能识别long press gesture,幸好有一个可以识别,那就是double click.因此我们注册它,代码如下 UITapGestureRecogn

WPF获取控件内部的ScrollViewer,并控制ScrollViewer操作

//获取内部  ScrollViewer方法 public static T FindVisualChild<T>(DependencyObject obj) where T : DependencyObject        {            if (obj != null)            {                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)          

C# webbrowser如何获取滚动条的位置?

获取滚动条的位置: HtmlDocument document = WB1.Document; int top = document.GetElementsByTagName("HTML")[0].ScrollTop;//滚动条垂直位置 指定滚动条滚动到指定位置 WB1.Document.Window.ScrollTo(0, 100);//滚动到100的位置 WB1.Document.Window.ScrollTo(0, WB1.Document.Body.ScrollRectangl

DevExpress 获取gridview 鼠标位置所在单元格

偶尔会有一些需要获取 gridview 鼠标位置所在单元格,从而实现某些特定功能的需求,经过一番研究,得出以下实现方法: GridHitInfo _info; Point _pt = gridview1.GridControl.PointToClient(Control.MousePosition); _info = gridview1.CalcHitInfo(_pt); bool IsInColumn =_info.InColumn;//判断是否在表头 GridColumn col= _inf

C# WPF获取任务栏时间区域的Rectangle

原文:C# WPF获取任务栏时间区域的Rectangle [StructLayout(LayoutKind.Sequential)] public struct WindowRect { public int left; public int top; public int right; public int bottom; } [DllImport("user32.dll")] private static extern IntPtr FindWindow(string ClassN