Как вы относитесь к относительному позиционированию в WPF? - PullRequest
28 голосов
/ 01 октября 2008

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

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

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

Ответы [ 2 ]

14 голосов
/ 02 октября 2008

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

Вроде так:

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

alt text

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

10 голосов
/ 01 октября 2008

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

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

...