当窗口垂直调整为更小的尺寸时,避免 WPF 状态栏完全折叠

Posted

技术标签:

【中文标题】当窗口垂直调整为更小的尺寸时,避免 WPF 状态栏完全折叠【英文标题】:Avoid WPF statusbar gets totally collapsed when window gets resized vertically to a smaller size 【发布时间】:2019-06-05 20:09:02 【问题描述】:

我有下面的 WPF 窗口,其中包含一个停靠面板作为主容器。然后我在顶部放置一个主网格(其中包含一些其他网格),在底部放置一个状态栏。

<Window>

  <DockPanel>
     <Grid DockPanel.Dock="Top">
         <!-- Grid stuff here -->
     </Grid>

     <StatusBar DockPanel.Dock="Bottom"                   
                VerticalAlignment="Bottom">

            <StatusBar.ItemsPanel>
                <ItemsPanelTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>

                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="100" />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="100" />
                        </Grid.ColumnDefinitions>
                    </Grid>
                </ItemsPanelTemplate>
            </StatusBar.ItemsPanel>
            <StatusBarItem Grid.Column="0">
                <TextBlock Text="Item1"/>
            </StatusBarItem>
            <Separator Grid.Column="1" />
            <StatusBarItem Grid.Column="2">
                <TextBlock />
            </StatusBarItem>
            <Separator Grid.Column="3" />
            <StatusBarItem Grid.Column="4">
                <TextBlock Text="AnotherItem" />
            </StatusBarItem>
  </DockPanel>

</Window>

我有以下问题: 当窗口垂直调整为更小的尺寸时,状态栏高度会降低甚至完全折叠。那么如何避免这种情况呢?我希望状态栏永远不会折叠并始终保持其高度。

【问题讨论】:

使用一个Grid作为视图的根,将状态栏放在第1行,高度为auto,另一个网格放在第0行,高度为* @Will 谢谢,它有效! 好吧,见鬼,我以为你会有问题。好的,我会记下一个实际的答案。 【参考方案1】:

Grids 中的网格现在很火。

<Window x:Class="GridRoot.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>
        <Grid Grid.Row="0">
            <Border BorderBrush="Black" BorderThickness="10" Background="CornflowerBlue">
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">
                    Hello!
                </TextBlock>
            </Border>
        </Grid>
        <StatusBar Grid.Row="1">
            <StatusBarItem>
                <TextBlock>
                    GET OFF ME!
                </TextBlock>
            </StatusBarItem>
        </StatusBar>
    </Grid>
</Window>

顶行占用尽可能多的可用空间,底行占用其内容所需的空间。由于 StatusBar 控件几乎都有一个固定的高度,因此它始终保持在底部可见。

有些人可能会在将网格放入另一个网格时遇到问题,但绝对没有理由不这样做。

上面的例子,tiny

和embiggened

【讨论】:

以上是关于当窗口垂直调整为更小的尺寸时,避免 WPF 状态栏完全折叠的主要内容,如果未能解决你的问题,请参考以下文章

使用 grad 将 PyTorch 张量调整为更小的尺寸

导航栏菜单在小屏幕上不垂直对齐和汉堡菜单的位置

如何使用 iOS 轻松调整/优化图像大小?

如何在编辑时将我的集合视图单元格设置为更小的动画?

调整 Google 地图标记图标图像的大小

WPF:调整图像大小,但仅在用户调整UI大小时