【问题标题】:Status bar in wpfwpf中的状态栏
【发布时间】:2014-08-15 06:17:53
【问题描述】:
<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 信息。

所以我习惯于在它们之间留出空间。

但是当我连接我的第二个客户端时,我的应用程序第一次启动后所有信息不应该是可见的,然后这部分来了,但它们之间应该有足够的空间,以便屏幕看起来不错。

状态栏的宽度和高度分别为 1533 和 20。我试图将两个不同客户端的两个子状态栏放在状态栏上,但不知何故它不起作用。请建议如何做到这一点

【问题讨论】:

    标签: wpf xaml statusbar


    【解决方案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 来确定状态栏的哪些部分应该可见或不可见。谨防现在设置显式尺寸!通常,您需要一些布尔属性来判断用户是否登录,然后绑定到该属性并使用 BooleanToVisbilityConverter。

    您还可以转储控件的模板并对其进行反汇编,以查看其内部工作原理。

    希望对你有帮助,

    干杯

    斯蒂安

    【讨论】:

      猜你喜欢
      • 2017-01-14
      • 2017-12-17
      • 2013-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多