以这个简单的代码为例:
<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 designer正确显示所有内容:
然而,在运行时,结果是:
注意到第nr行不再位于网格中了吗?!它被渲染到它的外部。此外,如果缩短窗口,垂直滚动条将变为可见,但它只滚动红色区域。无法滚动查看第4行。
如果从Grid
中删除VerticalAlignment="Top"
,则呈现似乎已修复,但滚动仍无法正常工作。
有人能解释一下到底是怎么回事吗?这是微软的bug吗?
我运行的是Visual Studio2017社区版(完全更新),Win 10版本1803,其中包含.NET 4.7.2。
(我认为这与.NET 4.7.2有关,因为直到现在我都没有注意到这个问题)
有一种解决方法,为所有行指定- <RowDefinition Height="Auto" />
,但这不是必需的...
发布于 2018-08-08 04:59:30
这是为*-行分配空间的新算法中的一个错误。(当应用程序以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)中修复了。
https://stackoverflow.com/questions/51618870
复制相似问题