Как получить TextBlock для выравнивания по правому краю? - PullRequest
13 голосов
/ 19 февраля 2009

Как мне получить 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>

Ответы [ 3 ]

16 голосов
/ 19 февраля 2009

Я поиграл с вашим кодом и сумел заставить его выглядеть "правильно" (без каламбура), используя 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 будет работать для вас.

3 голосов
/ 25 апреля 2010
<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

Вы не должны помещать разделитель в StatusBarItem, он уменьшит ваш разделитель до точки.

1 голос
/ 04 августа 2014

Для тех, кто ищет ответ на вопрос в заголовке (не обязательно для использования в строке состояния), я обнаружил, что Label лучше, чем TextBlock, поскольку он имеет контроль над выравниванием и все еще чувствует себя семантически правильным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...