Выравнивание элементов управления как с левой, так и с правой стороны в панели стека в WPF
У меня есть следующий код:
<DockPanel>
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
<RadioButton Content="_Programs"
IsChecked="{Binding Path=ProgramBanksSelected}" IsEnabled="{Binding Path=ProgramsEnabled}" Margin="8" />
<StackPanel>
<Label Content="Master" Height="28" Name="MasterFileStatus" VerticalContentAlignment="Center"/>
</StackPanel>
</StackPanel>
...
Радиокнопку следует поместить с левой стороны на панели стека (я удалил несколько кнопок, чтобы не загромождать пример), а ярлык (который я помещал временно во вложенную StackPanel) должен быть справа.
Я попробовал уже много комбинаций выравниваний, но я не могу получить ярлык с правой стороны.
Что я должен добавить, чтобы выполнить это?
Ответы
Ответ 1
Просто не используйте StackPanel
, StackPanels
стек. По очевидным причинам они не допускают выравнивания в том направлении, в котором они складываются. Используйте Grid
с такими определениями столбцов:
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
Ответ 2
Хотя это и старо, если кто-то встретит это, как я, здесь простое решение.
Создайте новую сетку и внутри этой сетки разместите две панели стека с различным горизонтальным выравниванием.
<Grid>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<!--Code here-->
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<!--Code here-->
</StackPanel>
</Grid>
Возможная проблема заключается в том, что теперь без дополнительной обработки они могут перекрываться друг с другом.
Ответ 3
Поскольку вы установили ориентацию StackPanel
на Horizontal
, свойство HorizontalAlignment
не будет работать над дочерними элементами. Вы можете сохранить StackPanel
, если вам нужны дополнительные элементы управления, хотя я бы рекомендовал переключиться на Grid
(между прочим), чтобы построить желаемый макет.
Кроме того, Grid
позволит вам контролировать фактическую ширину каждого столбца:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="150" />
</Grid.ColumnDefinitions>
<RadioButton
Grid.Column="0"
...
/>
<Label
Grid.Column="1"
...
/>
</Grid>