Вы можете получить местоположение визуала относительно другого визуала, используя TransformToVisual . Например, если child
является вашим элементом управления, а parent
является родительским элементом, например Window:
var point = child.TransformToVisual(parent).Transform(new Point(0, 0));
Вы можете использовать ActualHeight и ActualWidth , чтобы получить размер, и вы можете работать снизу и справа, добавляя их к местоположению.
Положение элемента управления устанавливается WPF Layout System , поэтому вы не можете установить положение во всех случаях. Если вы хотите изменить его, сделайте ваш элемент управления дочерним по отношению к Canvas и установите прикрепленные свойства Canvas.Top и Canvas.Left
Canvas.SetLeft(child, 123);
Canvas.SetTop(child, 456);
Обновление: как указывает Anvaka, есть несколько способов установить положение элемента, даже если он не находится внутри Canvas. Один из них - установить Margin . Элемент будет смещен вниз на Margin.Top и вправо на Margin.Left (хотя он также будет уменьшен). Вы можете даже установить компоненты поля на отрицательные значения, чтобы элемент переполнял свой контейнер с любой стороны.
Другой способ - с RenderTransform или LayoutTransform . Из документов "LayoutTransform игнорирует операции TranslateTransform", но вы все равно можете использовать RenderTransform:
child.RenderTransform = new TranslateTransform(left, top);
Если вы разрабатываете пользовательский интерфейс, позволяющий явно позиционировать элементы, вам, вероятно, будет проще добавить Canvas к родительскому элементу и добавить подвижные элементы в Canvas.