Текущие координаты данного элемента управления WPF - PullRequest
0 голосов
/ 08 сентября 2010

С учетом System.Windows.Controls.Control, как мне найти верхний левый и нижний правый углы элемента управления в пикселях? Кроме того, как я могу установить указанные углы? Я хочу произвольно изменить размеры или переместить элемент управления в зависимости от того, где он находится в данный момент. Я в C #.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 08 сентября 2010

Вы можете получить местоположение визуала относительно другого визуала, используя 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.

1 голос
/ 08 сентября 2010

Это зависит от контейнера, в котором находится ваш элемент управления. Я предполагаю, что у вас есть элемент управления в Canvas , если вы хотите свободно перемещать его.

В этой записи вы видите, как вы получаете позицию . С помощью и высоты вы можете получить соответствующие свойства элемента управления. В этом посте вы видите фрагмент кода для перемещения элементов.

Вы можете сделать это и с другими контейнерами, кроме Canvas, но это будет сложнее, потому что вам придется работать с косвенными значениями (margin).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...