我在网格中有一个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
类似。
对此有任何帮助表示赞赏,谢谢!
答案 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
。它应该恢复到可用空间。但是,嘿,我不是微软..