Search code examples
c#wpfuielement

Exposing VisualOffsets property


I am making an application in C# WPF and need the location of an object that I added to a panel. While debugging I found the VisualOffset property of the object that gives me the relative position. I just can't get the value from the code.

UserControl object - VisualOffset

What I would like to do is (though it is not possible):

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

So how can I get the relative position of an object?


Solution

  • Use TranslatePoint method of the Display instance. Set the parent control as a target. The code below will give you coordinates of display on its parent. If the container is further down the visual tree then you have to find a parent of a parent.

    In my sample I'm finding that on the parent. I'm doing that on button click and then return the results as a string to a text box - purely for simplicity sake. But the idea is the same wherever you use it:

    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 is of course an instance of the Display user control.