Подтвердить что ты не робот

Как вы относитесь к позиционированию в WPF?

Как вы можете позиционировать элементы в WPF? Стандартная модель заключается в использовании менеджеров компоновки для всего, но что, если вы хотите позиционировать элементы (например, на холсте) просто на основе позиции других элементов?

Например, вы можете захотеть, чтобы один элемент (например, кнопка) был прикреплен к стороне другой (возможно, панели) независимо от положения или компоновки этой панели. Любой, кто работал с инженерными инструментами (SolidWorks, AutoCad и т.д.), Знаком с такого рода относительным позиционированием.

Принуждение всего в менеджерах компоновки (различные панели WPF) не имеет особого смысла для определенных сценариев, где вам не все равно, что элементы поддерживаются каким-то родительским контейнером, и вы не хотите, чтобы другие дети были затронуты изменение макета/внешнего вида друг друга. Поддерживает ли WPF эту относительную модель позиционирования?

4b9b3361

Ответ 1

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

Так же:

<Canvas>
  <StackPanel Canvas.Left="100" Canvas.Top="100" Orientation="Horizontal">
    <Button>Button 1</Button><Button>Button 2</Button>
  </StackPanel>
</Canvas>

alt text

Я думаю, что он довольно гибкий, если вы используете более одного макета в форме, и вы можете создать практически любую необходимую конфигурацию.

Ответ 2

Хороший вопрос. Насколько мне известно, для получения этой функции нам нужна другая пользовательская панель. Поскольку WPF основан на Visual Hierarchy, нет способа иметь такую ​​структуру Flat для элементов на платформе.

Но вот трюк для этого.  Поместите свои элементы в одно и то же положение и дайте относительное перемещение с помощью RenderTransform.TranslateTransform. Таким образом, ваши TranslateTransfrom X и Y всегда будут относиться к другому элементу.