0

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

ScrollViewer 负责水平滚动并禁用垂直滚动。嵌套用户控件有一个包含两行的网格 - “标题”(另一个用户控件)和一个 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>
4

2 回答 2

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)之间切换。

于 2013-05-26T19:08:44.563 回答
0

正如@serg_o 在评论中所指出的那样,解决方案是通过命名 the 的孩子的高度,然后使用ScrollViewer绑定by 。ActualHeightScrollViewerScrollViewerElementName

<Grid Grid.Row ="1"> 
    <ScrollViewer x:Name="scrollViewer" HorizontalScrollBarVisibility="Auto" VerticalScrollMode="Disabled" VerticalScrollBarVisibility="Hidden"> 
        <userCtrl:MyUserControl Height="{Binding ElementName=scrollViewer, Path=ActualHeight}"/> 
    </ScrollViewer> 
</Grid>
于 2016-02-09T02:51:19.037 回答