Мне было интересно, могу ли я иметь 2 элемента управления в горизонтально ориентированной StackPanel, чтобы нужный элемент был пристыкован к правой стороне StackPanel.
Я попробовал следующее, но это не сработало:
<StackPanel Orientation="Horizontal">
<TextBlock>Left</TextBlock>
<Button Width="30" HorizontalAlignment="Right">Right<Button>
</StackPanel>
В приведенном выше фрагменте я хочу, чтобы кнопка была пристыкована к правой стороне StackPanel.
Примечание: мне нужно сделать это с помощью StackPanel, а не Grid и т. Д.
wpf
layout
wpf-controls
stackpanel
alignment
Шимми Вайцхандлер
источник
источник
Ответы:
Вы можете достичь этого с помощью
DockPanel
:Разница заключается в том, что a
StackPanel
упорядочивает дочерние элементы в одну строку (либо по вертикали, либо по горизонтали), тогда как aDockPanel
определяет область, в которой вы можете упорядочить дочерние элементы по горизонтали или по вертикали относительно друг друга (Dock
свойство изменяет положение элемента относительно других элементы в том же контейнере. Свойства выравнивания, такие какHorizontalAlignment
изменение позиции элемента относительно его родительского элемента).Обновить
Как указано в комментариях, вы также можете использовать
FlowDirection
свойство aStackPanel
. Смотрите ответ @ D_Bester .источник
LastChildFill="False"
его<DockPanel LastChildFill="False">
, см. stackoverflow.com/a/9599290/4573839Йо можно установить
FlowDirection
изStack panel
кRightToLeft
, а затем все элементы будут выровнены к правой стороне.источник
Для тех, кто наткнулся на этот вопрос, вот как добиться этого макета с помощью
Grid
:создает
источник
Не удалось заставить это работать с использованием DockPanel так, как я хотел, и изменение направления потока StackPanel проблематично. Использование сетки не вариант, так как элементы внутри нее могут быть скрыты во время выполнения, и поэтому я не знаю общее количество столбцов во время разработки. Лучшее и самое простое решение, которое я мог бы найти:
Это приведет к тому, что элементы управления внутри StackPanel будут выровнены по правой стороне доступного пространства независимо от количества элементов управления - как во время разработки, так и во время выполнения. Ура! :)
источник
Это прекрасно работает для меня. Просто сначала нажмите кнопку, так как вы начинаете справа. Если FlowDirection становится проблемой, просто добавьте вокруг него StackPanel и укажите FlowDirection = "LeftToRight" для этой части. Или просто укажите FlowDirection = "LeftToRight" для соответствующего элемента управления.
источник
источник
для Windows 10 используйте относительную панель вместо панели стека и используйте
для содержащихся элементов.
источник
Если у вас возникла проблема, подобная той, которая была у меня, когда метки были центрированы на моей вертикальной панели стеков, убедитесь, что вы используете элементы управления полной ширины. Удалите свойство Width или поместите кнопку в контейнер полной ширины, который позволяет выполнять внутреннее выравнивание. WPF - это использование контейнеров для управления макетом.
Вертикальная панель стека с левой меткой и правой кнопкой
Надеюсь, это поможет.
источник
Может быть, это не то, что вам нужно, если вам нужно избегать жестко заданных значений размера, но иногда я использую «шим» (разделитель) для этого:
источник