在Win8 XAML中使用SemanticZoom对分组的GridView中的滚动进行反应

时间:2012-04-29 19:12:34

标签: c# xaml gridview windows-8

我成功地在分组GridView的背景上创建了视差滚动效果,方法是将其包裹在ScrollViewer中并聆听ScrollViewer.ViewChanged事件。问题是当它与SemanticZoom混合时。

示例(剥离)XAML以显示我已完成的工作:

    <ScrollViewer>
        <SemanticZoom>
            <SemanticZoom.ZoomedInView>
                <GridView />
            </SemanticZoom.ZoomedInView>
            <SemanticZoom.ZoomedOutView>
                <GridView />
            </SemanticZoom.ZoomedOutView>
        </SemanticZoom>
    </ScrollViewer>

这允许我在用户滚动时移动背景。问题是SemanticZoom中断:当你缩小并选择一个组时,你总是被带到第一组。删除ScrollViewerSemanticZoom按预期工作,但我无法获得滚动位置(因为GridView没有公开它)。

基本上,我需要使用GridView + zoom语义显示分组切片+以不同于滚动的速度移动背景。

有没有办法在GridView中获取滚动位置,或者使上述工作成功?

更新:我在Win8 Consumer Preview中使用了C#和XAML,但更喜欢Release Release的解决方案。

1 个答案:

答案 0 :(得分:0)

SemanticZoom通过交叉缩放和交叉淡化两个用户控件(ZoomedInView和ZoomedOutView)有效地工作。我建议放两个ScrollViewers,一个放在ZoomedInView里面,一个放在ZoomedOutView里面。但是,ScrollViewer不实现SemanticZoom需要的ISemanticZoomInfo接口。

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