edit:我几乎重写了整个问题,因为我意识到这个问题不正确且令人困惑。我为此道歉,但这个问题有不正确的假设,无法回答。我最初试图简化它以使其更容易理解,但这使得无法复制我的问题。
如果我有一个DataGrid
在ScrollViewer
中带有MinHeight
,我希望随着视口的缩小,元素的ActualHeight
会降低,直到它在滚动条出现之前达到MinHeight
。
相反,当数据网格的行累积高度加起来超过MinHeight
时,此值似乎会覆盖最小高度
有没有办法做到这一点,而无需手动调整所有内容的大小并拥有大量代码?
例:
<ScrollViewer VerticalScrollBarVisibility="Auto" Background="Red">
<Grid x:Name="LayoutRoot" Background="Black" HorizontalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition MinHeight="20"/>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<sdk:DataGrid AutoGenerateColumns="True" Name="dataGrid1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" MinHeight="20" />
<Rectangle Fill="Blue" Width="100" Height="80" Grid.Row="1" />
</Grid>
</ScrollViewer>
如果要用一些行填充此网格,如果最大化窗口,则网格将占用大部分空间,并且在行后有空白。如果将其缩小,布局会从空白区域移开,直到该空间用完,然后根级别ScrollViewer
启动,即使尚未达到MinHeight
。
如果将DataGrid
替换为另一个矩形,则行为会有所不同(显然)。新矩形将缩小到高度 20。
我如何使用电网实现这一点?我的要求是在我的 SL 页面上嵌套滚动条(我觉得这很反感,但它不在我的控制范围内)。这个想法是顶级滚动条是某种"最后的手段"。
这个呢:
<ScrollViewer>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="250" />
</Grid.RowDefinitions>
<Rectangle MinHeight="150" Background="Red" Grid.Row="0" />
<Rectangle Height="250" Background="Blue" Grid.Row="1" />
</Grid>
您没有在任一矩形上设置 Grid.Row 值。
您没有提供足够的信息来解决您的特定问题。但是,很容易证明ScrollViewer
确实以您想要的方式工作,只需提炼为以下简单内容:
<UserControl ...>
<ScrollViewer VerticalScrollBarVisibility="Auto">
<Border MinHeight="200" BorderBrush="Blue" BorderThickness="1" Background="Red"/>
</ScrollViewer>
</UserControl>
将其放在主页中的独立 Silverlight 应用程序中,您将看到ScrollViewer
仅在窗口足够小时显示垂直滚动条。您可以在此处下载解决方案。
这是因为 ScrollViewer 本身有一个边框和填充,占用的空间很小。尝试考虑与滚动条边框空间相匹配的额外高度。
另一种选择是更改滚动查看器的控制模板,并删除内容演示器周围占用的边框和额外空间。并将水平滚动可见性设置为折叠,这样它就不会占用空间。