Silverlight 4 - ScrollViewer和子DataGrid的最小高度

3

编辑:我正在重写几乎整个问题,因为我意识到问题是不正确和混淆的。对此我感到抱歉,但这个问题有不正确的假设,使得它无法回答。我最初试图简化它以使其更容易理解,但这使得复制我的问题变得不可能。

如果我在ScrollViewer中有一个带有MinHeightDataGrid,我期望随着我的ViewPort缩小,元素的ActualHeight将减小,直到它达到MinHeight之前出现滚动条。

然而,似乎当数据网格的行累计高度超过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页面上具有嵌套滚动条(我觉得这很讨厌,但这不在我的控制范围内)。想法是顶层滚动条是“最后的手段”。

1
你能发布一下你的元素模板的XAML吗?我猜测原因可能是内容使它保持在比你想要的更高的位置。 - dain
3个回答

1

您没有提供足够的信息来解决您的具体问题。但是,通过将其简化为以下简单示例,可以轻松演示ScrollViewer确实按照您所需的方式工作:

<UserControl ...>
    <ScrollViewer VerticalScrollBarVisibility="Auto">
        <Border MinHeight="200" BorderBrush="Blue" BorderThickness="1" Background="Red"/>
    </ScrollViewer>
</UserControl>

将此代码放入独立的 Silverlight 应用程序的主页中,您会发现只有当窗口大小足够小时,ScrollViewer 才会显示垂直滚动条。 您可以在此处下载解决方案这里

1
请不要在您的帖子上签名。您的 Gravatar 就是您的签名。 - Bill the Lizard
2
@Bill:好的!祝你好运,SpeziFish。 - SpeziFish

1
这个怎么样?
<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 值。


0

这是因为 ScrollViewer 本身具有边框和填充,占据了自己很少的空间。尝试考虑应该匹配滚动条边框空间的一点额外高度。

另一个选项是更改 scrollviewer 的控件模板并删除围绕内容呈现器占用的边框和额外空间。并将水平滚动可见性设置为折叠,以便它不会占用空间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接