WPF. Как правильно выравнивать текстовый блок внутри горизонтально ориентированной панели стека?
Это должно быть так просто - я так долго бил головой о стол, пытаясь сделать кажущуюся простое задание (мне кажется, что WPF не интуитивно понятен или не работает)...
В любом случае у меня есть Stackpanel, который настроен на горизонтальную ориентацию. Внутри у меня есть два TextBlocks. Я хочу, чтобы второй отображал текст вправо.
Как это сделать?
Все это напоминает мне, почему я ушел от Silverlight.: Р
Ответы
Ответ 1
Вам нужно использовать DockPanel, если вы не хотите, чтобы все элементы были уложены как StackPanel. Чтобы заставить второй TextBlock выравниваться по правому краю, вы можете добавить дополнительный фиктивный TextBlock, чтобы заполнить область между ними:
<DockPanel>
<TextBlock>Left text</TextBlock>
<TextBlock DockPanel.Dock="Right">Right text</TextBlock>
<TextBlock />
</DockPanel>
Или вы можете использовать атрибут TextAlignment:
<DockPanel>
<TextBlock>Left text</TextBlock>
<TextBlock TextAlignment="Right">Right text</TextBlock>
</DockPanel>
Ответ 2
В свете ваших комментариев, вот еще один пример, показывающий несколько способов выполнения того, что вы хотите, макет сетки и макет DockPanel. По его словам, макет DockPanel - это, вероятно, то, что вы ищете. Если это не сработает, вам может потребоваться предоставить более четкое описание желаемого макета и свойств.
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.45*" />
<RowDefinition Height="0.05*" />
<RowDefinition Height="0.45*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<!-- note: you don't need to declare ColumnDefintion
widths here; added for clarity. -->
<ColumnDefinition Width="0.5*" />
<ColumnDefinition Width="0.5*" />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Background="Tomato"
TextWrapping="Wrap">I'm on the left</TextBlock>
<TextBlock
Grid.Column="1"
Background="Yellow"
TextAlignment="Right"
TextWrapping="Wrap">I'm on the right</TextBlock>
</Grid>
<Grid Grid.Row="1" Background="Gray" />
<DockPanel Grid.Row="2">
<TextBlock
DockPanel.Dock="Left"
Background="Tomato"
TextWrapping="Wrap">I'm on the left</TextBlock>
<TextBlock
DockPanel.Dock="Right"
Background="Yellow"
TextAlignment="Right"
TextWrapping="Wrap">I'm on the right</TextBlock>
</DockPanel>
</Grid>
</Page>
Ответ 3
Его можно легко архивировать, используя сетку, поскольку у меня такая же проблема:)
<Grid>
<TextBlock>Left text</TextBlock>
<TextBlock TextAlignment="Right">Right text</TextBlock>
</Grid>