2012-12-14 12 views
5

Ich habe meine eigene einfache Statusleiste mit 3 TextBlocks erstellt. Jetzt möchte ich, dass der erste Textblock so viel Platz benötigt, wie er zur Verfügung hat. Das scheint ich nicht zu machen. Jetzt braucht es nur noch den Platz, den man braucht, um den Text anzuzeigen.WPF Statusleiste, Stretch Textblock um so viel Platz wie möglich zu nehmen

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

Antwort

7

Nun, das ist ziemlich einfach: Sie hatten das StatusBarItem HorizontalAlignment = "Left", wenn es "strech" sein sollte, gleich für die HorizontalContentAlignment. würde auch vorschlagen, Marge = 0 auf der Grenze. das ist, was ich tat, so wird es für mich arbeiten:

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

wenn dies hilfreich bitte

+2

"Wenn dies hilfreich ist, bitte als Antwort markieren", keine Notwendigkeit, das zu sagen. OP weiß es bereits. – Clemens

+0

THx, so einfach wieder :) Ich habe dies als die Antwort wegen des Codebeispiels markiert. Florian's Lösung ist auch gut. – PitAttack76

4

Versuchen die StatusBarItem der HorizontalAlignment und HorizontalContentAlignment-Stretch Einstellung.

0

Stellen Sie die StatusBarItem der Horizontalcontentalignment als Antwort markieren zu dehnen und die Textalignment-Eigenschaft auf der rechten der Textblock. (Diese zweite Einstellung wird nur für das erste StatusBarItem benötigt, da Sie versuchen, den Text rechtsbündig auszurichten.)

0

StatusBar hat nur ein HorizontalAlignment = Right-Objekt, damit Sie nur das letzte Element erhalten Artikel im gewünschten Ort. Sie können statusBars FlowDirection = "RightToLeft" setzen und das Element in umgekehrter Reihenfolge hinzufügen. Details: Rechts platzierte Objekte müssen nicht von StatusBarItem umgeben sein, aber das linke muss gestreckt werden. Folgendes Code:

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