公开 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用户控件的一个实例。