2016-05-03 2 views
1

XAML код, внутри сетки:XAML HorizontalAlignment свойство не делать то, что я хочу

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> 
    <TextBlock Text="My text: " HorizontalAlignment="Left" /> 
    <TextBox Text="{Binding ...}" /> 
</StackPanel> 

Я хотел бы TextBlock быть выровнены по левому краю и Tetblock быть правым выровнено. С предыдущим кодом оба выравниваются по правому краю.

Тот же результат, если добавить внутренний StackPanel:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Right"> 
    <StackPanel HorizontalAlignment="Left"> 
     <TextBlock Text="My text: " HorizontalAlignment="Left" /> 
    </StackPanel> 
    <TextBox Text="{Binding ...}" /> 
</StackPanel> 

Как я должен делать? Thx заранее.

+0

'StackPanel' неправильное управление. Его «дети» расположены один за другим. Попробуйте дать 'StackPanel' что-то отличное (например,« Background = «Green»), чтобы увидеть это. Вероятно, вы хотите использовать 'Grid'. Непонятно, почему вы выравниваете 'StackPanel' вправо,' Stretch' может делать то, что вы хотите, но у вас есть еще одна проблема, которую вы пытались решить, выровняв ее вправо, какой? – Sinatr

+0

@Sinatr. Я предполагал, что он хотел, чтобы текст выравнивался сначала, но потом я понял, что он, вероятно, хочет, чтобы «StackPanel» заполнил ячейку «Gird» и что «TextBlock» должен просто заполнить оставшееся пространство. Если это так, 'DockPanel' будет делать трюк, поскольку он может использовать последний элемент управления для заполнения оставшегося пространства. – Adwaenyth

ответ

6

HorizontalContentAlignmentTextAlignment. HorizontalAlignment определяет выравнивание TextBox относительно StackPanel. Текст внутри поля TextBox по умолчанию по-прежнему выравнивается влево, если вы не используете глобальный Style.

Также StackPanel с горизонтальной ориентацией всегда использует минимальное возможное пространство. Таким образом, он будет аккуратно складывать элементы управления. Вам нужно либо использовать сетку, либо дать TextBox/TextBlock контроль фиксированной ширины, если вы хотите отформатировать ее должным образом.

/изменить: извините. TextAlignment для TextBox или TextBlock контроль. HorizontalContentAlignment предназначен для элементов управления, которые явно не используют свойство Text, например, Label.

Альтернатива, если вы не хотите использовать фиксированную ширину было бы DockPanel как следующее:

<DockPanel Grid.Column="0" Grid.Row="0" Margin="10, 0" LastChildFill="true"> 
    <TextBox Width="160" Height="30" DockPanel.Dock="Right" BorderBrush="#6593CF" BorderThickness="1" Text="{Binding ...}" /> 
    <TextBlock Text="My text: " FontSize="14" FontWeight="SemiBold" DockPanel.Dock="Left" TextAlignment="Left" /> 
</DockPanel> 
+0

Все нормально. Спасибо за ваше объяснение :) –

+0

TextAlignment = «Right» работал для меня в UWP. Благодарю. –

Смежные вопросы