我目前正在构建一个 Windows 8 XAML C# 应用程序。在一个页面中,我有一个用于水平滑动和滚动的滚动查看器。我有几个控件,它们与 scorllviewer 配合得非常好。但是当您滚动并且您的光标位于 ListView / GridView 的顶部时,该控件将处理 scrollnig 而不是 scrollviewer。滑动不会发生这种情况,但是使用鼠标滚轮会停止滚动查看滚动。有人知道如何禁用此行为或有解决方法吗?
问问题
7674 次
6 回答
1
我在这里找到了解决方法:msdn workaround
基本上,您必须执行以下操作:
基础 XAML:
<Grid Name="BaseElement">
<ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto">
<GridView />
<GridView />
</ScrollViewer>
</Grid>
向根元素添加一个新的 Handler:
BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true);
实现 Handler 来处理滚动:
private void Bubble_PointerWheelChanged(object sender, PointerRoutedEventArgs e) { // Could walk up the tree to find the next SV or just have a reference like here: MainScrollViewer.ScrollToHorizontalOffset(MainScrollViewer.HorizontalOffset - e.GetCurrentPoint(null).Properties.MouseWheelDelta); }
于 2012-12-02T15:18:13.080 回答
1
在解决这个问题很长一段时间后,我决定改变策略。至少在我的解决方案中,我将内部GridView更改为ItemsControl。这样我就可以处理所有的点击/点击,但仍然让滚动按预期工作。
当然,此解决方案并不适合所有人,因为有时您还需要所有选择的东西。但对我来说,它起作用了,因为我只需要点击/点击项目。
希望能帮助到你
于 2012-10-05T19:47:45.207 回答
1
1.在View.cs中添加这段代码:
private void ThumbnailViewer_OnMouseWheel(object sender, MouseWheelEventArgs e)
{
ThumbnailViewerScroller.ScrollToHorizontalOffset(ThumbnailViewerScroller.HorizontalOffset - e.Delta);
}
2.在Xaml中添加代码:
<ScrollViewer
x:Name="ViewerScroller"
MouseWheel="ThumbnailViewer_OnMouseWheel">
<StackPanel>
...
</StackPanel>
</ScrollViewer>
于 2013-12-09T07:55:39.237 回答
0
有史以来最好的解决方案。
public class CustomGridView : GridView
{
protected override void OnApplyTemplate()
{
base.OnApplyTemplate();
var sv = this.GetTemplateChild("ScrollViewer") as UIElement;
if (sv != null)
sv.AddHandler(UIElement.PointerWheelChangedEvent, new PointerEventHandler(OnPointerWheelChanged), true);
}
private void OnPointerWheelChanged(object sender, PointerRoutedEventArgs e)
{
e.Handled = false;
}
}
于 2013-11-22T07:15:16.460 回答
0
我也有同样的问题。然后我尝试从下面线程中提到的网格模板中删除滚动条..它对我来说很好..
于 2013-06-02T04:56:09.593 回答
0
这也是我看到的问题。它在触摸中不存在 - 似乎仅在使用鼠标滚轮时发生。我还不知道解决方法。我不认为有一个。
于 2012-10-05T15:36:09.173 回答