公开VisualOffsets属性

时间:2015-12-25 17:17:38

标签: c# wpf uielement

我在C#WPF中创建一个应用程序,需要我添加到面板中的对象的位置。在调试时我发现了对象的VisualOffset属性,它给了我相对位置。我无法从代码中获取价值。

UserControl object - 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

那么我怎样才能得到一个物体的相对位置?

1 个答案:

答案 0 :(得分:1)

使用TranslatePoint实例的Display方法。将父控件设置为目标。下面的代码会在其父级上为您提供display的坐标。如果容器位于可视树的下方,则必须找到父级的父级。

在我的样本中,我在父母身上发现了这一点。我在点击按钮时执行此操作,然后将结果作为字符串返回到文本框 - 纯粹为了简单起见。但无论你在哪里使用它,这个想法都是一样的:

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