对在 Win8 XAML 中使用语义缩放在分组网格视图中滚动做出反应
本文关键字:滚动 视图 网格 XAML Win8 语义 对在 缩放 | 更新日期: 2023-09-27 18:32:32
我成功地在分组GridView
的背景上创建了视差滚动效果,方法是将其包装在ScrollViewer
中并收听ScrollViewer.ViewChanged
事件。问题是当它与SemanticZoom
混合时。
示例(剥离)XAML 以显示我已完成的操作:
<ScrollViewer>
<SemanticZoom>
<SemanticZoom.ZoomedInView>
<GridView />
</SemanticZoom.ZoomedInView>
<SemanticZoom.ZoomedOutView>
<GridView />
</SemanticZoom.ZoomedOutView>
</SemanticZoom>
</ScrollViewer>
这允许我在用户滚动时移动背景。问题是SemanticZoom
中断:当您缩小并选择一组时,您总是会被带到第一个组。删除ScrollViewer
让我们SemanticZoom
按预期工作,但随后我无法获得滚动位置(因为GridView
没有暴露它)。
基本上,我需要使用 GridView + 语义缩放 + 以与滚动不同的速度移动背景来呈现分组磁贴。
有没有办法在 GridView 中获取滚动位置,或使上述工作
?更新:我在 Win8 消费者预览版中使用 C# 和 XAML,但更喜欢发布预览版的解决方案。
SemanticZoom 通过交叉缩放和交叉淡入淡出两个用户控件(ZoomedInView 和 ZoomedOutView)来有效地工作。我建议放置两个ScrollView,一个在ZoomedInView内,一个在ZoomedOutView内。但是,ScrollViewer 没有实现 SemanticZoom 所需的 ISemanticZoomInfo 接口。
您可以查看订阅 ViewChanged 事件并在缩小时更改 ScrollViewer 上的某些内容。我正在考虑关闭IsHitTestVisible,但由于GridView是一个孩子,我认为这只会禁用所有内容。您可以尝试关闭手势事件或缩放链,但我不知道这是否可以解决您看到的问题。我同意其他人的观点,即拥有实际样本会有所帮助。