Silverlight 4 - ScrollViewer和子DataGrid MinHeight

时间:2011-05-18 16:11:07

标签: wpf xaml silverlight-4.0 scrollviewer

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

如果我在DataGrid中有一个MinHeight ScrollViewer,我希望随着我的ViewPort缩小,该元素的ActualHeight将会减少,直到它在滚动条显示之前点击MinHeight

相反,似乎当datagrid的行累积高度加起来超过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页面上嵌套滚动条(我觉得这很令人反感,但这不在我的掌控之中)。这个想法是顶级滚动条是各种各样的“最后的手段”。

3 个答案:

答案 0 :(得分:1)

您没有提供足够的信息来解决您的具体问题。但是,很容易证明ScrollViewer确实以您想要的方式工作,通过简单的方式提炼出来:

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

将它放在主页面中的独立Silverlight应用程序中,您会看到ScrollViewer仅在窗口足够小时显示垂直滚动条。您可以下载解决方案here

答案 1 :(得分: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值。

答案 2 :(得分:0)

这是因为ScrollViewer本身有一个边框和填充,占用的空间很小。尝试考虑与滚动条边框空间匹配的额外高度。

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