элементы управления не доходят до правой границы при выравнивании по правому краю

Выровненная по правому краю метка не достигает правой границы:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Stretch">
    <Label Content="Left Align" HorizontalAlignment="Left"/>
    <Label Content="Right Align" HorizontalAlignment="Right" />
</StackPanel>

Кажется, что обе метки не занимают всю доступную ширину, хотя я указал HorizontalAlignment = "Stretch". В чем причина этого?

введите описание изображения здесь


person Bogdan Verbenets    schedule 19.07.2012    source источник


Ответы (3)


Для этого вы должны использовать DockPanel вместо StackPanel.

См. Также Выровнять элементы на панели стека? или

<DockPanel LastChildFill="False">
    <Label Content="Left Align" DockPanel.Dock="Left"/>
    <Label Content="Right Align" DockPanel.Dock="Right" />
</DockPanel>

И @santosc описал здесь почему выравнивание с помощью StackPanel не работает так, как вы ожидали:

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

person Stephan Bauer    schedule 19.07.2012
comment
Спасибо, приму твой ответ через 7 минут. Но не могли бы вы объяснить мне, почему мой XAML не дает таких же результатов? - person Bogdan Verbenets; 19.07.2012
comment
@ Bogdan0x400, когда вы устанавливаете ширину (панели стека), то она такая же;) - person David; 19.07.2012

StackPanel сжимается, чтобы соответствовать содержимому, если ширина не указана.

Используйте DockPanel, как сказал Стефан Бауэр, или, возможно, Grid.

person Miklar    schedule 19.07.2012

Попробуй :

     <Grid>
       <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="Auto"/>
       </Grid.ColumnDefinitions>
       <Label Grid.Column="0" Content="Left Align" />
       <Label Grid.Column="2" Content="Right Align"  />
    </Grid>
person Cassius    schedule 17.04.2015