1

拿这个简单的代码:

<Window x:Class="WpfApplication1.Window2"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window2" Height="340" Width="600">
    <ScrollViewer>
        <Grid Background="Red" VerticalAlignment="Top">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" MinWidth="20" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>

            <TextBlock Grid.Row="0" Text="1:" />
            <TextBox Grid.Row="0" Grid.Column="1" Height="80" Margin="4" />

            <TextBlock Grid.Row="1" Text="2:" />
            <TextBox Grid.Row="1" Grid.Column="1" Height="80" Margin="4" />

            <TextBlock Grid.Row="2" Text="3:" />

            <TextBlock Grid.Row="3" Grid.Column="0" Text="4.:" />
        </Grid>
    </ScrollViewer>
</Window>

Visual Studio 设计器正确显示所有内容: 在此处输入图像描述

然而,在运行时,结果如下: 在此处输入图像描述

注意第 nr 4 行如何不再在网格内?!它呈现在它之外。此外,如果您缩短窗口,垂直滚动条会变得可见,但它只会滚动红色区域。无法滚动查看第 4 行。

如果VerticalAlignment="Top"从 中删除Grid,则渲染似乎已修复,但滚动仍然无法正常工作。

谁能解释到底发生了什么?这是微软的错误吗?

我正在运行 Visual Studio 2017 社区版(完全更新),Win 10 版本 1803,其中包含 .NET 4.7.2。

(我认为它与.NET 4.7.2有关,因为直到现在我才注意到这个问题)

有一种解决方法,<RowDefinition Height="Auto" />为所有行指定 - ,但这不是必需的......

4

1 回答 1

1

这是为 *-rows 分配空间的新算法中的一个错误。(当应用程序以 4.7+ 为目标时,或者当您安装 4.7+ 并设置 Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=false 时,应用程序会使用新算法。)

该错误已在较早前报告(请参阅https://github.com/Microsoft/dotnet/issues/674),并且已在 4.8 中修复(请参阅https://github.com/Microsoft/dotnet-framework-early-access/ blob/master/release-notes/NET48/build-3632/dotnet-build-3632-changes.md#wpf)。

于 2018-08-07T20:59:30.327 回答