我在一个用户控件的代码隐藏文件中。在此用户控件中,我有一个名为GBoard的网格。我在主XAML文件中创建了此用户控件的一个实例,并将其命名为GameBoard。现在,我处于前面所说的代码背后,我想获得GameBoard的X / Y位置。如果我获取Margin,则所有值都设置为0。如果我执行Canvas.GetTop(this),它将以NaN形式返回。如何获取这些坐标?我认为这并不是我的代码中的错误,因为一切正常,只是我似乎无法掌握坐标。
Position = new Point(Canvas.GetTop(GameBoard), Canvas.GetLeft(GameBoard));
获取值的NaN。
boardMargin = GameBoard.Margin;
boardMargin即使位于屏幕中心也为0,0,0,0。
<UserControl x:Class="UserControls.Board"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
xmlns:controls="clr-namespace:UserControls"
d:DesignHeight="300" d:DesignWidth="300">
<Grid Name="GBoard">
<Grid.ColumnDefinitions>
//lots of these
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
//lots of these
</Grid.RowDefinitions>
</Grid>
</UserControl>
那是用户控件。我编辑了大量的col和row def空间。
<Page x:Class="GUI.SGUI"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="clr-namespace:UserControls"
Title="SGUI" Height="1000" Width="1000">
<Canvas x:Name="LetterCanvas">
<controls:Board x:Name="GameBoard" Height="Auto" Canvas.Left="120" Canvas.Top="164" Width="Auto"/>
</Canvas>
</Page>
我发现,如果从主类访问位置,则可以获取坐标;如果从用户控件的代码访问,则不能获取坐标。因此,如果必须的话,我可以做些骇人听闻的事情,但是我宁愿在用户控件内部获取坐标。
用户控件中的代码需要访问Canvas才能获得GameBoard的位置,因为WPF中的Canvas元素使用绝对定位。
假设LetterCanvas将成为GameBoard的父元素-尝试在后面的代码中为GameBoard用户控件使用此元素:
double xPosition = Canvas.GetLeft(this);
double yPosition = Canvas.GetTop(this);
注意:必须从方法而不是构造函数调用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句