2012-12-14 30 views
5

Tôi đã tạo thanh trạng thái đơn giản của riêng mình với 3 TextBlocks. Bây giờ tôi muốn rằng Textblock đầu tiên chiếm nhiều không gian vì nó có sẵn. Điều đó tôi dường như không được thực hiện .. Bây giờ nó chỉ mất không gian cần thiết để hiển thị văn bản.Thanh trạng thái WPF, giãn khối văn bản để có nhiều không gian nhất có thể

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

Trả lời

7

Vâng điều này là khá thẳng về phía trước: bạn đã đặt StatusBarItem HorizontalAlignment = "Left" khi cần "strech", tương tự cho HorizontalContentAlignment. Cũng sẽ đề xuất đặt margin = 0 trên đường viền. đây là những gì tôi đã làm như vậy nó sẽ làm việc cho tôi:

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

nếu điều này là hữu ích xin vui lòng đánh dấu là câu trả lời

+2

"nếu điều này hữu ích, vui lòng đánh dấu là câu trả lời", không cần phải nói điều đó. OP đã biết. – Clemens

+0

THx, rất đơn giản lần nữa :) Tôi đã đánh dấu phần này là câu trả lời vì ví dụ về mã. Giải pháp của Florian cũng tốt. – PitAttack76

4

Hãy thử thiết lập của StatusBarItem HorizontalAlignmentHorizontalContentAlignment-Stretch.

0

Đặt HorizontalContentAlignment của StatusBarItem Stretch và tài sản TextAlignment của TextBlock Right. (Cài đặt thứ hai này chỉ cần thiết cho StatusBarItem đầu tiên vì có vẻ như bạn cố gắng căn chỉnh văn bản sang bên phải trong đó.)

0

StatusBar chỉ có một HorizontalAlignment = Mục phải có hiệu lực, vì vậy bạn chỉ có thể nhận được mục ở nơi muốn. Bạn có thể đặt FlowDirection của statusBar = "RightToLeft" và thêm mục theo thứ tự đảo ngược. Thông tin chi tiết: các mục được đặt đúng không cần StatusBarItem bao quanh, nhưng phần bên trái cần được streched. Mã sau:

<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> 
Các vấn đề liên quan