暴露VisualOffsets属性
问题描述:
我正在C#WPF中创建一个应用程序,并需要我添加到面板的对象的位置。在调试过程中,我找到了给我相对位置的对象的VisualOffset属性。我无法从代码中获得价值。暴露VisualOffsets属性
我想要做的是(虽然它是不可能的):
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
所以,我怎么能得到一个物体的相对位置?
答
使用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
用户控件的实例。
+1
谢谢。有用。是否存在VisualOffset属性存在但无法访问的原因? – Daltons
为什么不在UserControl中创建另一个公共属性,它只是返回'VisualOffset'值? – Clemens