使用以下简单代码:
<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>
注意第4行nr不再位于网格内吗?它在其外部呈现。 此外,如果您缩短窗口,则垂直滚动条的确可见,但仅滚动红色区域。无法滚动以查看第4行。
如果您从VerticalAlignment="Top"
中删除了Grid
,则呈现效果似乎是固定的,但是滚动仍然无法正常进行。
有人可以解释到底发生了什么吗?是微软的错误吗?
我正在运行Visual Studio 2017社区版(已完全更新),Win 10版本1803,其中包含.NET 4.7.2。
(我认为它与.NET 4.7.2有关,因为到目前为止我从未注意到此问题)
有一种解决方法,为所有行指定-<RowDefinition Height="Auto" />
,但这不是必须的...
答案 0 :(得分:1)
这是新算法中的错误,用于将空间分配给*行。 (当应用程序针对4.7+或您已安装4.7+并设置Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace = false时,该应用程序将使用新算法。)
该错误先前已报告(请参见Codesanbox),并且已在4.8中修复(请参见https://github.com/Microsoft/dotnet/issues/674)。