Silverlight 4 - ScrollViewer and child DataGrid MinHeight



edit:我几乎重写了整个问题,因为我意识到这个问题不正确且令人困惑。我为此道歉,但这个问题有不正确的假设,无法回答。我最初试图简化它以使其更容易理解,但这使得无法复制我的问题。

如果我有一个DataGridScrollViewer中带有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 本身有一个边框和填充,占用的空间很小。尝试考虑与滚动条边框空间相匹配的额外高度。

另一种选择是更改滚动查看器的控制模板,并删除内容演示器周围占用的边框和额外空间。并将水平滚动可见性设置为折叠,这样它就不会占用空间。

最新更新