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

Выравнивание элементов управления как с левой, так и с правой стороны в панели стека в 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) должен быть справа.

Я попробовал уже много комбинаций выравниваний, но я не могу получить ярлык с правой стороны. Что я должен добавить, чтобы выполнить это?

4b9b3361

Ответ 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>