【问题标题】:Maddening: WPF interior grid will not layout content properly令人抓狂:WPF 内部网格无法正确布局内容
【发布时间】:2018-08-07 11:26:18
【问题描述】:

我已经连续两天在这个问题上,仍然无法弄清楚!请帮忙!

我想做的事情似乎比较简单。我有一个带有网格的窗口。共有三行:一行“自动”,一组用于填充剩余空间,另一行设置为“自动”,具有最大高度。这是 xaml:

        <Grid Name="theGrid" >
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
            <RowDefinition Height="Auto" MaxHeight="300"></RowDefinition>
        </Grid.RowDefinitions>
        <ContentControl Grid.Row="0" Content="{Binding fixedLabel}"></ContentControl>
        <ContentControl Grid.Row="1" Content="{Binding bigLabel}"></ContentControl>
        <ContentControl Grid.Row="2" Content="{Binding gridWithStackPanel}"></ContentControl>
    </Grid>

前两行只有一个简单的标签。第三行本身由一个网格组成。这是一个简单的网格,有两行,一排可以填充剩余空间,另一排标记为“自动”。这是该网格的 xaml:

        <Grid Name="theGrid" Style="{StaticResource BasePGOGridStyle}">
        <Grid.RowDefinitions>
            <RowDefinition Height="1*"></RowDefinition>
            <RowDefinition Height="Auto"></RowDefinition>
        </Grid.RowDefinitions>
        <ContentControl Grid.Row="0" Content="{Binding stackPanel}"></ContentControl>
        <ContentControl Grid.Row="1" Content="{Binding simpleLabel}"></ContentControl>
    </Grid>

所需的行为很简单:第二个网格将有一个堆栈面板作为其顶部项目,底部有一个简单的标签。但是,如果堆栈面板有很多项目,它只会炸掉底部的标签。尽管设置为“自动”,但 WPF 似乎并未为“simpleLabel”保留空间。

似乎正在发生的事情是 WPF 告诉第二个网格“嘿,您在父网格中被标记为 'Auto',所以占用尽可能多的空间”。因此,第二个网格的布局就好像它有很多空间一样,显示了堆栈面板中的所有项目。然后,WPF 似乎在说,“等一下,你的父行有一个 maxHeight 值,所以你需要自己剪辑”。最终发生的是“simpleLabel”然后从布局中删除。

这是我对正在发生的事情的最佳猜测,但也许还有其他事情发生。我进行了广泛的研究,但找不到解决问题的方法。我真的是唯一一个在具有 MaxHeight 的网格中放置网格的人吗?这似乎是 WPF 功能的基本部分。

如果您有任何想法,请告诉我!

【问题讨论】:

  • 这是 StackPanel 本身。它忽略了它的父母告诉它的可用空间是什么,只是占据了它的孩子想要的所有空间。使用其他面板,例如 DockPanel,或将其放入 ScrollViewer。
  • 感谢您的评论,但这不是问题所在。如果我将 StackPanel 放在 ScrollViewer 中,滚动条就会超出窗口布局。此外,如果放置在具有“自动”高度的网格中,则 StackPanel 不会自动将其他所有内容吹出。在这种情况下这样做是因为与它的父网格行发生了一些奇怪的交互。

标签: c# .net wpf vb.net


【解决方案1】:

好的,我终于找到了解决方案!您必须忘记在网格行中使用 maxHeight,只需将 maxHeight 值放在您要绑定的项目上。这似乎完全解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 2017-03-12
    • 2012-06-25
    • 2022-01-18
    • 2021-11-24
    • 2018-07-20
    相关资源
    最近更新 更多