我有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>
答案 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滚动。