对在 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,但更喜欢发布预览版的解决方案。

对在 Win8 XAML 中使用语义缩放在分组网格视图中滚动做出反应

SemanticZoom 通过交叉缩放和交叉淡入淡出两个用户控件(ZoomedInView 和 ZoomedOutView)来有效地工作。我建议放置两个ScrollView,一个在ZoomedInView内,一个在ZoomedOutView内。但是,ScrollViewer 没有实现 SemanticZoom 所需的 ISemanticZoomInfo 接口。

您可以查看订阅 ViewChanged 事件并在缩小时更改 ScrollViewer 上的某些内容。我正在考虑关闭IsHitTestVisible,但由于GridView是一个孩子,我认为这只会禁用所有内容。您可以尝试关闭手势事件或缩放链,但我不知道这是否可以解决您看到的问题。我同意其他人的观点,即拥有实际样本会有所帮助。