我目前正在构建Windows 8 XAML C#应用程序。在页面中,我有一个水平滑动和滚动的滚动查看器。我有几个控件,它们与scorllviewer配合得很好。但是当您滚动并且光标位于ListView / GridView的顶部时,该控件将处理scrollnig而不是scrollviewer。 通过滑动,这不会发生,但使用鼠标滚轮停止滚动查看滚动。 有人知道如何禁用此行为或有解决方法吗?
答案 0 :(得分:1)
在解决这个问题很长一段时间后,我决定改变策略。至少在我的解决方案中,我将内部 GridView 更改为 ItemsControl 。这样我可以处理所有点击/点击但仍然按预期滚动工作。
当然,这个解决方案并不适合所有人,因为有时你也需要所有的选择。但对我来说,它起作用,因为我只需要点击/点击项目。
希望有所帮助
答案 1 :(得分:1)
我在这里找到了一个解决方法:msdn workaround
基本上你必须做以下事情:
基础XAML:
<Grid Name="BaseElement">
<ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto">
<GridView />
<GridView />
</ScrollViewer>
</Grid>
将新处理程序添加到根元素:
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);
}
答案 2 :(得分: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>
答案 3 :(得分:0)
这也是我看到的问题。触摸不存在 - 只有在使用鼠标滚轮时才会出现。我还不知道一个解决方法。我不认为有一个。
答案 4 :(得分:0)
我也有同样的问题。然后我尝试从网格模板中删除滚动条,如下面的线程所示..它对我来说很好..
答案 5 :(得分: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;
}
}