1

我有一个正在尝试调试的应用程序,并且我正在通过 snoop 在运行时查看各种设置。

我遇到的问题是这样的:

有一个网格,高度为 50.4 。它有 3 个行定义,每个定义的高度为 1 星 (*)。因此可以假设每个 RowDefinition 的实际高度为 50.4/3 (16.8)。但是,我可以看到前 2 个 RowDefinition 的 ActualHeight 为 25.2,第三个的 ActualHeight 为 0。所有三个 RowDefinition 的高度仍然是 1 星。

这怎么可能 ?我只是可以看到您如何实现这种情况。您不能在语法上将 ActualHeight 更改为只读。高度必须在 Grid 的 Arrange pass 中设置。

有谁知道会产生这种情况的任何情况。

4

1 回答 1

1

我找到了答案 - 我不知道它是否是 WPF 错误,或者我没有正确阅读文档

<Border Background="Red" HorizontalAlignment="Center" VerticalAlignment="Center">
    <Grid HorizontalAlignment="Center" VerticalAlignment="Center" Margin="5">
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <TextBox Text="123" Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" />
        <TextBox Text="123" Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed" />
        <TextBox Text="123" Grid.Row="2" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Collapsed" />
    </Grid>
</Border>

如果您查看代码,您会看到有 3 个星号 (*) 大小的行,它们应该在网格的高度中占有相等的份额,而不管它们的内容如何。

但是,当您折叠分配给该行的所有内容时,该行本身也会折叠。(如果你窥探它,它的高度为 *,但 ActualHeight 为 0)

有人认为这是正常行为吗?在过去 5 年的所有 WPF 开发中,我从未听说过这一点

于 2012-08-21T14:38:57.283 回答