Reputation: 29228
I have a UserControl
(boxes) that can have varying size based on the number of items in its ItemsControl
.
Many such usercontrols are added to a Canvas
programmatically.
I need to draw arrows interconnecting these usercontrols. What is the best way to get the origin coordinates of the control w.r.t the Canvas
and the rendered Width
/Height
so that I can figure out the arrow start and endpoints.
Upvotes: 0
Views: 177
Reputation: 2241
Canvas
provides the coordinates of each control via Canvas.Left
and Canvas.Top
attached properties - which you know if you positioned them yourself anyway. So the (slightly) harder part is getting the other coordinate, and for that you want to know the rendered height/width. ActualHeight
and ActualWidth
give you this, assuming the control has already been laid out:
double top = Canvas.GetTop(control)
double bottom = top + control.ActualHeight
double left = Canvas.GetLeft(control)
double right = left + control.ActualWidth
If you're doing this before the controls have had a chance to be rendered on the screen, you can first do control.UpdateLayout()
(or control.Measure()
) to ensure the layout system measures their size.
Upvotes: 2