【问题标题】:How to get a TextBlock to right-align?如何让 TextBlock 右对齐?
【发布时间】:2018-10-22 08:47:54
【问题描述】:

如何让下方状态栏中的 TextBlock 向右对齐?

我已经告诉它:

  • Horizo​​ntalAlignment="右"
  • TextAlignment="右"

但文字仍然不听话地坐在左边。我还有什么要说的?

<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>

【问题讨论】:

    标签: xaml


    【解决方案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 发生了什么 - 我的所有经验表明,Horizo​​ntalContentAlignment 和 Horizo​​ntalAlignment 的某种组合(在 StatusBar 和 TextBlock 上)应该可以达到您想要的效果。无论如何 - 希望 StatusBarItem 对你有用。

    【讨论】:

    • 两个项目没有对齐。只有一个单项右对齐
    • @EdPlunkett 不,许多控件具有对齐属性。例如,Horizo​​ntalAlignment、Horizo​​ntalContentAlignment 和 TextAlignment。
    【解决方案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的示例

    您不应该在 StatusBarItem 中放置分隔符,它会将您的分隔符缩小为一个点。

    【讨论】:

    【解决方案3】:

    对于任何在标题中寻找问题答案的人(不一定要在状态栏中使用),我发现 Label 比 TextBlock 更好,因为它可以控制对齐并且仍然感觉语义正确。

    【讨论】:

      猜你喜欢
      • 2016-03-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2022-11-10
      • 2018-03-09
      • 2011-07-23
      • 2013-03-04
      • 2011-03-15
      相关资源
      最近更新 更多