WPF 状态栏,拉伸文本块以占用尽可能多的空间

问题描述 投票:0回答:4

我用 3 个文本块创建了自己的简单状态栏控件。现在我希望第一个文本块占用尽可能多的可用空间。我似乎没有完成..现在只需要显示文本所需的空间。

XAML:

  <StatusBar Background="{StaticResource GradientBrush}">
<StatusBar.ItemsPanel>
  <ItemsPanelTemplate>
    <Grid>
      <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
      </Grid.RowDefinitions>
      <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition Width="Auto" />
      </Grid.ColumnDefinitions>
    </Grid>
  </ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem HorizontalAlignment="Left"
               HorizontalContentAlignment="Right">
  <Border BorderThickness="1"
          BorderBrush="Black"
          Padding="5 0 5 0"
          Background="White">
    <TextBlock Text="{Binding Message, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
             Foreground="{Binding TextColorMessage}"
             Background="White"
             />
  </Border>
</StatusBarItem>
<Separator Grid.Column="1" />
<StatusBarItem Grid.Column="2"
               HorizontalAlignment="Right">
  <TextBlock Text="{Binding Path=DatabaseName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</StatusBarItem>
<Separator Grid.Column="3" />
<StatusBarItem Grid.Column="4"
               HorizontalAlignment="Right">
  <TextBlock Text="{Binding Path=ComputerName}" />
</StatusBarItem>

My StatusBar

wpf xaml statusbar
4个回答
13
投票

您已将

StatusBarItem
HorizontalAlignment="Left"
设置为
Stretch
,与
HorizontalContentAlignment
相同。 还建议在边框上设置
Margin="0"

这就是我所做的,所以它对我有用:

<StatusBarItem HorizontalAlignment="Stretch"
               HorizontalContentAlignment="Stretch">
    <Border BorderThickness="1"
            BorderBrush="Black"
            Margin="0"
            Padding="5 0 5 0"
            Background="White">
        <TextBlock Text="{Binding Message, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                   Foreground="{Binding TextColorMessage}"
                   Background="White"/>
    </Border>
</StatusBarItem>

6
投票

尝试将 StatusBarItem 的

HorizontalAlignment
HorizontalContentAlignment
设置为
Stretch


0
投票

将 StatusBarItem 的 HorizontalContentAlignment 设置为 Stretch,将 TextBlock 的 TextAlignment 属性设置为 Right。 (第二个设置仅适用于第一个 StatusBarItem,因为您似乎尝试将文本向右对齐。)


0
投票

StatusBar 只有一个 HorizontalAlignment=Right 项目才能生效,因此您只能在想要的位置获取最后一项。您可以设置 statusBar 的 FlowDirection="RightToLeft" 并以相反的顺序添加项目。详细信息:右侧放置的项目不需要 StatusBarItem 包围,但左侧的项目需要拉伸。以下代码:

<StatusBar VerticalAlignment="Bottom" FlowDirection="RightToLeft"><!--flow right to left cause items right aligned-->
    <!--make item's flow back left to right, avoid display disorder-->
    <TextBlock x:Name="textBlock_status_R1" Text="111.147.168.20" Grid.Column="2" Margin="10,0" FlowDirection="LeftToRight"/>
    <Separator/>
    <TextBlock x:Name="textBlock_status_R2" Text="Working" Margin="10,0" FlowDirection="LeftToRight"/>
    <Separator/>
    <!--To fill rest space,need StatusBarItem packing and default HorizontalAlignment="Stretch"-->
    <StatusBarItem FlowDirection="LeftToRight">
        <TextBlock x:Name="textBlock_status_L1" Text="Information here."/>
    </StatusBarItem>
</StatusBar>
© www.soinside.com 2019 - 2024. All rights reserved.