XAML:限制嵌套在ScrollViewer中的控件大小(滚动嵌套在ScrollViewer中)

时间:2013-05-26 01:46:14

标签: windows-runtime winrt-xaml

我正在尝试将用户控件嵌套在ScrollViewer中,使其高度与ScrollViewer的高度相同,这可能因屏幕大小而异(即不固定)。

ScrollViewer负责水平滚动并禁用垂直滚动。嵌套的用户控件有一个有两行的网格 - " header" (另一个用户控件)和ListView。此ListView应该是可垂直滚动的。这里的目标是"标题"保持原位,ListView的大内容可以垂直滚动。否则,如果包含ScrollViewer负责垂直滚动,那么"标题"在ScrollViewer的垂直滚动时,它将离开可见区域。

我的问题是:如何使嵌套用户控件的高度与ScrollViewer的高度(未修复)相同?如果未指定/约束嵌套用户控件的高度(在下面的代码段中等于540),则ListView将占用所需的所有空间,因此不能垂直滚动。换句话说,我想我需要删除硬编码的高度" 540"从而以某种方式使其高度与其父级(ScrollViewer)相同。可能有更好的解决方案,但限制用户控件的高度似乎是实现目标的一种方法。

以下是使用ScrollViewer的页面的相关XAML:

<Grid x:Name="MainGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="140"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Row ="1">
        <ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Hidden">
            <userCtrl:MyUserControl Height="540"/>
        </ScrollViewer>

    </Grid>

以下是用户控件的XAML片段

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="120"></RowDefinition>
        <RowDefinition Height="*"></RowDefinition>
    </Grid.RowDefinitions>

    <local:HeaderRow x:Name="headerRow"></local:HeaderRow>
    <ListView x:Name="gridBodyListView" Grid.Row="1 "/>
</Grid>

2 个答案:

答案 0 :(得分:0)

我不太了解这种情况。我尝试了你的XAML,它在ScrollViewer中生成了一个ListView,水平内容可滚动,垂直内容被剪裁。如果这不是你想要的,你能用一些更多的背景来解释究竟想要实现的目标吗?

https://github.com/finnigantime/Samples/tree/master/examples/Win8Xaml/ListView_LimitSizeInSV

请注意,ListView已经具有.Header和.HeaderTemplate属性,并且在其模板中已经有一个围绕其ItemsPanel的ScrollViewer。您可以直接在ListView上设置附加的ScrollViewer属性,以在水平/垂直滚动(Horizo​​ntal / VerticalScrollBarVisibility和Horizo​​ntal / VerticalScrollMode)之间切换。

答案 1 :(得分:0)

正如@serg_o在评论中所指出的,解决方法是通过命名{{1}将ScrollViewer的孩子的高度绑定到ActualHeight的{​​{1}}。然后使用ScrollViewer的绑定。

ScrollViewer