网格渲染错误的WPF ScrollViewer

时间:2018-07-31 17:20:41

标签: .net wpf scrollviewer wpfgrid

使用以下简单代码:

<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设计器可以正确显示所有内容: enter image description here

但是,在运行时,结果如下: enter image description here

注意第4行nr不再位于网格内吗?它在其外部呈现。 此外,如果您缩短窗口,则垂直滚动条的确可见,但仅滚动红色区域。无法滚动以查看第4行。

如果您从VerticalAlignment="Top"中删除了Grid,则呈现效果似乎是固定的,但是滚动仍然无法正常进行。

有人可以解释到底发生了什么吗?是微软的错误吗?

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

(我认为它与.NET 4.7.2有关,因为到目前为止我从未注意到此问题)

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

1 个答案:

答案 0 :(得分:1)

这是新算法中的错误,用于将空间分配给*行。 (当应用程序针对4.7+或您已安装4.7+并设置Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace = false时,该应用程序将使用新算法。)

该错误先前已报告(请参见Codesanbox),并且已在4.8中修复(请参见https://github.com/Microsoft/dotnet/issues/674)。

相关问题