我正在尝试将用户控件嵌套在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>
答案 0 :(得分:0)
我不太了解这种情况。我尝试了你的XAML,它在ScrollViewer中生成了一个ListView,水平内容可滚动,垂直内容被剪裁。如果这不是你想要的,你能用一些更多的背景来解释究竟想要实现的目标吗?
https://github.com/finnigantime/Samples/tree/master/examples/Win8Xaml/ListView_LimitSizeInSV
请注意,ListView已经具有.Header和.HeaderTemplate属性,并且在其模板中已经有一个围绕其ItemsPanel的ScrollViewer。您可以直接在ListView上设置附加的ScrollViewer属性,以在水平/垂直滚动(Horizontal / VerticalScrollBarVisibility和Horizontal / VerticalScrollMode)之间切换。
答案 1 :(得分:0)
正如@serg_o在评论中所指出的,解决方法是通过命名{{1}将ScrollViewer
的孩子的高度绑定到ActualHeight
的{{1}}。然后使用ScrollViewer
的绑定。
ScrollViewer