ListView在ScrollViewer中的Grid内部

时间:2014-02-24 17:13:36

标签: c# xaml windows-runtime scroll

我在网格中有一个ListView,而这个网格又位于“整体ScrollViewer”内。 用户应该能够水平滚动整个页面,然后垂直向下滚动几个子列表元素。虽然我可以横向滚动,但在页面内容周围放置ScrollViewer外部会破坏我的ListViews

以下是我的XAML设置的简化版本:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.RowDefinitions>
        <RowDefinition Height="140" />
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>

    <TextBlock x:Uid="Title" Text="Title"/>

    <ScrollViewer Grid.Row="1" ZoomMode="Disabled"
                  VerticalScrollBarVisibility="Hidden" 
                  HorizontalScrollBarVisibility="Auto" 
                  VerticalScrollMode="Disabled"
                  HorizontalScrollMode="Enabled">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="380" />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>

            <!--My List-->
            <ListView x:Name="MyList" Grid.Column="0" />


            <Grid x:Name="AppointmentDetailView" Grid.Column="1">
                <!--Some other stuff-->
            </Grid>
        </Grid>
    </ScrollViewer>
</Grid>

如果我在ListView的任何父级或ListView本身上设置固定高度,则滚动按预期工作,但对于不同大小的屏幕,不希望修复高度。我尝试绑定ListView父母的ActualHeight,但没有运气。

即使ScrollViewers被禁用,似乎ScrollViewer.VerticalScrollMode个孩子也没有被限制在可用的高度。对我来说似乎很奇怪,我希望ScrollViewer的布局逻辑在它被禁用的方向上与Grid类似。

对此有任何帮助表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:1)

我找到了一种解决方法,涉及将ScrollViewer包裹在Grid中并绑定到Grids的子元素上的外ActualHeightProperty ScrollViewer。它有点像黑客,但做我需要它,并做这样的事情

<Grid x:Name="ScrollViewerContainer" ...>
    <ScrollViewer VerticalScrollMode="Disabled" ...>
         <!--Page Content-->
         <Grid Height="{Binding ActualHeight, ElementName=ScrollViewerContainer}" ...>
              ....

我个人觉得ScrollViewer不允许其子项在特定方向禁用滚动模式时确定其Width/Height,因为它会破坏嵌套的ScrollViewer。它应该恢复到可用空间。但是,嘿,我不是微软..