2012-12-14 6 views
5

Stworzyłem własną prostą kontrolę stanu za pomocą 3 bloków tekstowych. Teraz chciałbym, aby pierwszy Textblock zajmował tyle miejsca, ile ma do dyspozycji. Nie wydaje mi się, żebym był gotowy ... Teraz zajmuje tylko miejsce potrzebne do wyświetlenia tekstu.Pasek stanu WPF, rozciągnij blok tekstu, aby uzyskać jak najwięcej miejsca.

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

Odpowiedz

7

To jest całkiem proste: ustawiłeś StatusBarItem HorizontalAlignment = "Left", kiedy powinno być "strech", to samo dla HorizontalContentAlignment. Sugeruje również ustawienie marginesu = 0 na granicy. to co zrobiłem, więc będzie pracować dla mnie:

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

jeśli jest to pomocne prosimy oznaczyć jako odpowiedź

+2

"jeśli jest to pomocne, oznacz jako odpowiedź", nie trzeba tego mówić. OP już wie. – Clemens

+0

THX, tak proste ponownie :) Zaznaczam to jako odpowiedź z powodu przykładu kodu. Rozwiązanie Floriana jest również dobre. – PitAttack76

4

Spróbuj ustawić StatusBarItem na HorizontalAlignment i HorizontalContentAlignment do Stretch.

0

ustawić StatusBarItem za HorizontalContentAlignment rozciągać i mienia textblock za TextAlignment do prawej. (To drugie ustawienie jest potrzebne tylko dla pierwszego elementu StatusBarItem, ponieważ wydaje się, że próbujesz wyrównać tekst do prawej strony).

0

StatusBar ma tylko jeden HorizontalAlignment = Prawy element do wykonania, więc możesz uzyskać tylko ostatni przedmiot w pożądanym miejscu. Możesz ustawić Flow Flow = "RightToLeft" statusBar i dodać element w odwrotnej kolejności. Szczegóły: elementy umieszczone poprawnie nie muszą być StatusBarItem otoczone, ale lewy należy streched. Zgodnie z kodem:

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