6

我目前正在构建一个 Windows 8 XAML C# 应用程序。在一个页面中,我有一个用于水平滑动和滚动的滚动查看器。我有几个控件,它们与 scorllviewer 配合得非常好。但是当您滚动并且您的光标位于 ListView / GridView 的顶部时,该控件将处理 scrollnig 而不是 scrollviewer。滑动不会发生这种情况,但是使用鼠标滚轮会停止滚动查看滚动。有人知道如何禁用此行为或有解决方法吗?

4

6 回答 6

1

我在这里找到了解决方法:msdn workaround

基本上,您必须执行以下操作:

基础 XAML:

   <Grid Name="BaseElement">
        <ScrollViewer Name="MainScrollViewer" Style="{StaticResource HorizontalScrollViewerStyle}" VerticalScrollMode="Auto">
            <GridView />
            <GridView />
        </ScrollViewer>
    </Grid>
  1. 向根元素添加一个新的 Handler:

    BaseElement.AddHandler(PointerWheelChangedEvent, new PointerEventHandler(Bubble_PointerWheelChanged), true);
    
  2. 实现 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;
    }
}

更多信息:ScrollViewer 中的 GridView

于 2013-11-22T07:15:16.460 回答
0

我也有同样的问题。然后我尝试从下面线程中提到的网格模板中删除滚动条..它对我来说很好..

https://stackoverflow.com/a/10305608/2444509

于 2013-06-02T04:56:09.593 回答
0

这也是我看到的问题。它在触摸中不存在 - 似乎仅在使用鼠标滚轮时发生。我还不知道解决方法。我不认为有一个。

于 2012-10-05T15:36:09.173 回答