<StatusBar Height="20" Grid.ColumnSpan="4" HorizontalAlignment="Left" Name="statusBar1" VerticalAlignment="Bottom" Width="1533" Background="AntiqueWhite">
<TextBlock >HName:</TextBlock>
<TextBlock Name="hname" Text="{Binding Path=CHost}"></TextBlock>
<Separator/>
<TextBlock >P:</TextBlock>
<TextBlock Name="p" Text="{Binding Path=CPort, TargetNullValue=6130,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Separator/>
<TextBlock Name="cstatus">CStatus:</TextBlock>
<TextBlock x:Name="CoStatus" Text="{Binding Path=CStatus, NotifyOnSourceUpdated=True,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Separator/>
<TextBlock AllowDrop="False" Name="sock1">CSock:</TextBlock>
<TextBlock x:Name="CoName" Text="{Binding Path=CoName,NotifyOnSourceUpdated=True, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Separator x:Name="seperator1" Margin="520,0,0,0"/>
<TextBlock >HName:</TextBlock>
<TextBlock Name="hname1" Text="{Binding Path=CHost1}"></TextBlock>
<Separator/>
<TextBlock >P:</TextBlock>
<TextBlock Name="p1" Text="{Binding Path=CPort, TargetNullValue=6130,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Separator/>
<TextBlock Name="cstatus1">CStatus:</TextBlock>
<TextBlock x:Name="CStatus1" Text="{Binding Path=CStatus1, NotifyOnSourceUpdated=True,Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
<Separator/>
<TextBlock AllowDrop="False" Name="sock2">Sock1:</TextBlock>
<TextBlock x:Name="CoName1" Text="{Binding Path=CoName1,NotifyOnSourceUpdated=True, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}"></TextBlock>
</StatusBar>
我已在主窗口中添加了此状态栏并放置在屏幕的底部。我在里面控制显示一些有价值的文字。
我必须在主窗口的同一状态栏上显示两个不同客户端的Hname,P,CStatus和sock的信息。
所以我习惯在他们之间腾出空间。
但是当我连接我的第二个客户端后,当我的应用程序第一次启动所有信息后,我想要的东西不应该是可见的那么这部分来了,但它们之间应该有足够的空间,以便Screen看起来很好。
状态栏的宽度和高度分别为1533和20。我试图在状态栏上为两个不同的客户端放置两个子状态栏,但SomeHow它不起作用。请建议如何做到这一点
答案 0 :(得分:1)
一种解决方案是在状态栏内使用网格,如下所示:
<StatusBar HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch">
<StatusBarItem HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch" >
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
...
</Grid.ColumnDefinitions>
<!-- Content goes here using the grid -->
<Grid/>
<StatusBarItem/>
<StatusBar/>
或者使用itemtemplate作为状态栏,如下所示:
<StatusBar Height="40">
<StatusBar.ItemsPanel>
<ItemsPanelTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition MaxWidth="100" />
</Grid.ColumnDefinitions>
</Grid>
</ItemsPanelTemplate>
</StatusBar.ItemsPanel>
<StatusBarItem Grid.Column="0">
<!-- content... -->
</StatusBarItem>
<StatusBarItem Grid.Column="1">
<!-- content -->
</StatusBarItem>
<StatusBarItem Grid.Column="2" Visibility="{Binding IsSomePropertyVisible, Converter={StaticResrouce BooleanToVisibilityConverter}}">
<!-- content -->
</StatusBarItem>
....
</StatusBar>
使用IValueConverter确定状态栏的哪些部分应该可见。请注意立即设置明确的尺寸!通常,您希望某些属性是一个bool,它告诉用户是否已登录,并且只是绑定到该属性并使用BooleanToVisbilityConverter。
您也可以转储控件的模板并对其进行反汇编,以了解它在内部的工作原理。
希望它有所帮助,
干杯
了Stian