2012-12-14 43 views
5

我用3個TextBlocks創建了自己的簡單狀態欄控件。現在我希望第一個Textblock佔用儘可能多的空間。我似乎沒有完成..現在只需要顯示文本所需的空間。WPF狀態欄,拉伸文本塊以儘可能多地佔用空間

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

回答

7

那麼這是非常簡單的: 當你應該是「strech」時,你已經設置了StatusBarItem Horizo​​ntalAlignment =「Left」,對於Horizo​​ntalContentAlignment也是如此。 也會建議在邊框上設置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> 

,如果這是有幫助的,請標記爲答案

+2

「如果這有幫助請標記爲答案」,不需要說明。 OP已經知道。 – Clemens

+0

THx,再簡單一點:)由於代碼示例,我已將此標記爲答案。弗洛裏安的解決方案也很好。 – PitAttack76

4

嘗試將StatusBarItem的HorizontalAlignmentHorizontalContentAlignmentStretch

0

設置StatusBarItem的Horizo​​ntalContentAlignment伸展和將TextBlock的TextAlignment屬性權。 (此第二個設置僅用於第一個StatusBarItem,因爲您似乎嘗試將文本向右對齊。)

0

StatusBar只有一個Horizo​​ntalAlignment = 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>