如何在Windows 8.1上使用鼠标滚轮禁用FlipView项目之间的滚动

时间:2015-07-08 13:21:40

标签: windows-runtime windows-8.1 winrt-xaml

我有Windows 8.1 Store C#/ XAML应用程序,在这个应用程序中我有FlipView和几个flipview项目。在一个项目中,我有很长的WebView 问题 - 当我在WebView中使用鼠标滚轮滚动并到达页面末尾时, FlipView然后滚动到下一个项目,这是不需要的

预期的行为是在WebView中自由滚动,而不是在FlipView项目之间滚动。理想情况下,FlipView项目之间的切换应仅使用触摸或程序更改。

我尝试在FlipViewItem或嵌套项目上设置不同的ScrollViewer属性,重新启动ManipulationMode,但到目前为止没有任何工作。

示例代码:

<FlipView>
    <FlipViewItem>
        <Grid Background="Red"/>
    </FlipViewItem>
    <FlipViewItem>
        <Grid>
        <!-- when scrolling on this page, do not navigate to Blue or Red FlipViewItem-->
            <WebView Source="http://cnn.com"/>
        </Grid>
    </FlipViewItem>
    <FlipViewItem>
        <Grid Background="Blue"/>
    </FlipViewItem>
</FlipView>

1 个答案:

答案 0 :(得分:4)

在尝试几乎所有ScrollViewer附加属性后找到它,解决方案实际上非常简单 - 正如Tamás Deme暗示我需要处理包含该元素的Parent元素上的PointerWheelChanged事件 web视图。

<FlipView>
    <FlipViewItem>
        <Grid Background="Red"/>
    </FlipViewItem>
    <FlipViewItem>
        <Grid PointerWheelChanged="PointerWheelIgnore">
            <WebView Source="http://cnn.com"/>
        </Grid>
    </FlipViewItem>
    <FlipViewItem>
        <Grid Background="Blue"/>
    </FlipViewItem>
</FlipView>

...

private void PointerWheelIgnore(object sender, PointerRoutedEventArgs e)
{
    e.Handled = true;
}

为什么会这样? WebView正在翻译鼠标滚轮滚动事件以移动Web内容并将PointerRoutedEventArgs设置为Handled。但是,如果Web内容已经位于底部,则WebView不会将PointerRoutedEventArgs设置为Handled,而此事件则会冒泡到FlipView,FlipView在FlipViewItems之间翻转。如果我在WebView和FlipView之间处理/停止PointerWheelChanged事件,那么项目之间就没有FlipView滚动。