Как получить TextBlock для выравнивания по правому краю?
Как получить TextBlock в строке состояния ниже, чтобы выровнять его вправо?
Я сказал ему:
- HorizontalAlignment = "Right"
- TextAlignment = "Right"
но текст по-прежнему сидит ненадолго слева. Что еще я могу сказать?
<Window x:Class="TestEvents124.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300"
MaxWidth="700" Width="700"
>
<DockPanel HorizontalAlignment="Stretch" Margin="0,0,0,0" Width="Auto">
<StatusBar Width="Auto" Height="25" Background="#888" DockPanel.Dock="Bottom" HorizontalAlignment="Stretch">
<TextBlock
Width="Auto"
Height="Auto"
Foreground="#fff"
Text="This is the footer."
HorizontalAlignment="Right"
TextAlignment="Right"
/>
</StatusBar>
<GroupBox DockPanel.Dock="Top" Height="Auto" Header="Main Content">
<WrapPanel Width="Auto" Height="Auto">
<TextBlock Width="Auto" Height="Auto" TextWrapping="Wrap" Padding="10">
This is an example of the content, it will be swapped out here.
</TextBlock>
</WrapPanel>
</GroupBox>
</DockPanel>
</Window>
Ответы
Ответ 1
У меня была игра с вашим кодом и удалось заставить ее выглядеть "правильно" (не каламбур), используя StatusBarItem, а не TextBlock:
<StatusBar Width="Auto" Height="25"
Background="#888" DockPanel.Dock="Bottom"
HorizontalAlignment="Stretch" >
<StatusBarItem Foreground="#fff"
HorizontalContentAlignment="Right">This is the footer</StatusBarItem>
</StatusBar>
Не уверен, что происходит с TextBlock - весь мой опыт говорит о том, что некоторая комбинация HorizontalContentAlignment и HorizontalAlignment (как для StatusBar, так и для TextBlock) должна достигать того, что вы хотите. В любом случае, надеюсь, StatusBarItem будет работать для вас.
Ответ 2
<StatusBar>
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="100"/>
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem Grid.Column="0">
<TextBlock>something</TextBlock>
</StatusBarItem>
<Separator Grid.Column="1" />
<StatusBarItem Grid.Column="2">
<TextBlock>logged in</TextBlock>
</StatusBarItem>
</StatusBar>
Этот пример не испортит ваш разделитель. На основе примера, взятого из http://kent-boogaart.com/blog/the-perfect-wpf-statusbar
Вы не должны помещать Separator в StatusBarItem, это уменьшит ваш разделитель до точки.
Ответ 3
Для тех, кто ищет ответ на вопрос в заголовке (не обязательно для использования в строке состояния), я обнаружил, что ярлык лучше, чем TextBlock, для управления выравниванием и все еще чувственно семантически корректным.