我在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
那么我怎样才能得到一个物体的相对位置?
答案 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
用户控件的一个实例。