我正在尝试获取控件(按钮)的位置,但它会一直返回{0; 0} . 我确定有这方面的解释,但我无法弄清楚为什么会发生这种情况 .
我想要控件的位置,相对于窗口或某个容器 . 我的按钮排列在另一个网格中 . 取这些按钮的边距只会给出0,0,因为它们都在网格单元格内 .
我尝试了什么:
- var point = btnTest.TransformToAncestor(mainGrid).Transform(new Point());
- UIElement container = VisualTreeHelper.GetParent(btnTest) as UIElement;
Point relativeLocation = btnTest.TranslatePoint(new Point(0, 0), mainGrid);
我尝试使用网格作为父级和画布 . 我尝试的一切都给了我{0,0} . 当我更改 new Point
参数时,位置确实会发生变化 . 它与参数保持一致 .
我的XAML的一小部分:
<Grid x:Name="mainGrid">
<Grid Name="buttonGrid" Margin="105,64,98.4,97.8">
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
<RowDefinition Height="25"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="50"/>
</Grid.ColumnDefinitions>
<Button x:Name="btnTest" Grid.Row="0" Grid.Column="0" Content="Button" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="26" Height="29"/>
<Button x:Name="btnTest2" Grid.Row="1" Grid.Column="1" Content="Button" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Top" Width="26" Height="29"/>
</Grid>
</Grid>
1 回答
你的代码完全正常,这是时间问题 . 必须先绘制UI元素,然后才能检索位置 .
下面的代码示例显示了在构造函数中运行的点提取,其结果为0,0然后在加载的事件中运行,该事件返回所需的结果84,78 .