公开 VisualOffsets 属性
Exposing VisualOffsets property
我正在用 C# WPF 创建一个应用程序,需要我添加到面板的对象的位置。在调试时,我发现对象的 VisualOffset 属性 给我相对位置。我只是无法从代码中获取值。
我想做的是(虽然不可能):
var display = new Display(); // This is a class that inhereit UserControl
.
.
// At some point when display is added to a panel
var position = display.VisualOffset; // This property is not accessible
那么如何获取物体的相对位置呢?
使用 Display
实例的 TranslatePoint
方法。将父控件设置为目标。下面的代码将为您提供 display
在其父级上的坐标。如果容器在可视化树的下方,那么您必须找到父项的父项。
在我的示例中,我在父级上找到了它。我在单击按钮时这样做,然后 return 结果作为文本框的字符串 - 纯粹是为了简单起见。但是无论你在哪里使用它的想法都是一样的:
private void Button_Click(object sender, RoutedEventArgs e)
{
var parent = display.Parent as UIElement;
var location = display.TranslatePoint(new Point(0, 0), parent);
this.myTextBox.Text = $"x: {location.X}, y: {location.Y}";
}
display
当然是Display
用户控件的一个实例。
我正在用 C# WPF 创建一个应用程序,需要我添加到面板的对象的位置。在调试时,我发现对象的 VisualOffset 属性 给我相对位置。我只是无法从代码中获取值。
我想做的是(虽然不可能):
var display = new Display(); // This is a class that inhereit UserControl
.
.
// At some point when display is added to a panel
var position = display.VisualOffset; // This property is not accessible
那么如何获取物体的相对位置呢?
使用 Display
实例的 TranslatePoint
方法。将父控件设置为目标。下面的代码将为您提供 display
在其父级上的坐标。如果容器在可视化树的下方,那么您必须找到父项的父项。
在我的示例中,我在父级上找到了它。我在单击按钮时这样做,然后 return 结果作为文本框的字符串 - 纯粹是为了简单起见。但是无论你在哪里使用它的想法都是一样的:
private void Button_Click(object sender, RoutedEventArgs e)
{
var parent = display.Parent as UIElement;
var location = display.TranslatePoint(new Point(0, 0), parent);
this.myTextBox.Text = $"x: {location.X}, y: {location.Y}";
}
display
当然是Display
用户控件的一个实例。