wpf 怎么获取StackPanel 中控件的位置。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wpf 怎么获取StackPanel 中控件的位置。相关的知识,希望对你有一定的参考价值。

StackPanel 中控件都是堆积布局的,怎么能获取控件的位置那、

参考方法有以下二种:
  方法一:
  //_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));
  
  用到的NameSpace
  using System.Windows;
  using System.Windows.Media;
参考技术A 那么获取来做什么?只有Canvas才能精确定位。追问

点一个按钮 让滚动条滚动到,那个位置

追答

肯定有其他内置的方法,我找到了再来更新答案。

追问

我用另一个号回答我的问题

追答

你那个方法不错,表明你的C#技术还是到位。不过似乎没有用好WPF的优势。在我们平时的开发中很少需要获取某个控件的具体位置。

追问

可是要实现点击标题让滚动条滚到那标题文字那。不就得获取为止吗

追答

可是你上面写的代码似乎没有一句是滚动到某个位置的。参考一下这个:
http://stackoverflow.com/questions/1615568/scroll-a-new-item-in-a-itemscontrol-into-view

本回答被提问者采纳

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





















以上是关于wpf 怎么获取StackPanel 中控件的位置。的主要内容,如果未能解决你的问题,请参考以下文章

WPFの获取任意元素的位置

WPF:如何使控件在 StackPanel 中拉伸?

2021-08-16 WPF控件专题 StackPanel 控件详解

怎样在wpf下固定控件位置随界面的变化保持不动

网格和stackpanel之间的WPF组合

WPF中窗体打开的位置怎么控制?