暴露VisualOffsets属性

问题描述:

我正在C#WPF中创建一个应用程序,并需要我添加到面板的对象的位置。在调试过程中,我找到了给我相对位置的对象的VisualOffset属性。我无法从代码中获得价值。暴露VisualOffsets属性

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 

所以,我怎么能得到一个物体的相对位置?

+0

为什么不在UserControl中创建另一个公共属性,它只是返回'VisualOffset'值? – Clemens

使用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