疯狂:WPF内部网格不会正确布局内容

时间:2018-02-27 17:56:58

标签: c# .net wpf vb.net

我已经连续两天在这上面了,仍然无法理解!请帮忙!

我想做的事情似乎相对简单。我有一个带网格的窗口。有三行:一行“自动”,一组用于填充剩余空间,另一行设置为“自动”,最大高度。这是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>

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

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

这是我对发生的事情的最好猜测,但也许还有其他事情发生。我做了大量研究,无法找到问题的解决方案。我真的是唯一一个将网格放在具有MaxHeight的网格中的人吗?它似乎是WPF功能的基本部分。

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

1 个答案:

答案 0 :(得分:0)

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