【问题标题】:How to get the absolute position of an element?如何获取元素的绝对位置?
【发布时间】:2012-09-12 20:49:15
【问题描述】:

假设一些简单的事情,例如:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="300" />
        <ColumnDefinition Width="300" />
    </Grid.ColumnDefinitions>

    <TextBlock Name="MainTextBlock" Grid.Column="1" Text="Hello" />
</Grid>

如何获取MainTextBlock的绝对位置?

【问题讨论】:

  • 你的意思是相对于窗口、网格还是用户屏幕的位置?相对于网格,可以获取或设置 Margin 属性;在画布中 - Top 和 Left 属性。
  • 你必须手动计算控件的位置,阅读这里blogs.msdn.com/b/llobo/archive/2006/05/02/…
  • WinRT中恐怕没有“DllImport”。
  • 按照理论:先在窗口中找到位置,然后在屏幕上找到窗口的位置。做减法,你会得到结果。你能解释一下为什么你需要一个控件的绝对位置吗?
  • 如果接受的答案在您的项目中不起作用(就像我一样),您可以编写一个循环来总结 UIElement 的 ActualOffset 及其父、祖父等直到根元素。

标签: c# windows-8 microsoft-metro


【解决方案1】:

我认为这会起作用...

var ttv = MainTextBlock.TransformToVisual(Window.Current.Content);
Point screenCoords = ttv.TransformPoint(new Point(0, 0));

【讨论】:

  • 太好了,这正是我想要的
  • 谢谢,它可以帮助我编写需要 cur 并知道其位置的应用程序。但是当MainPage.Frame中的页面中的控件可以获取到位置呢?
  • 遗憾的是,这在 Xaml Island 项目中不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 2014-02-23
  • 1970-01-01
  • 2022-11-02
相关资源
最近更新 更多