6

現在、Windows 8 XAML C# アプリケーションを構築しています。ページには、水平スワイプとスクロール用のスクロールビューアがあります。scorllviewer と非常にうまく連携するいくつかのコントロールがあります。ただし、スクロールしてカーソルが ListView / GridView の上にある場合、そのコントロールは scrollviewer の代わりに scrollnig を処理します。スワイプではこれは起こりませんが、マウスのスクロールホイールではスクロールビューのスクロールが停止します。この動作を無効にする方法や回避策を知っている人はいますか?

4

6 に答える 6

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 に答える
1

ここで回避策を見つけました: msdn 回避策

基本的に、次のことを行う必要があります。

ベース 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. スクロールを処理するハンドラを実装します。

    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 に答える
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

私も同じ問題を抱えていました。次に、以下のスレッドで説明されているように、Grid テンプレートからスクロールバーを削除しようとしました..それは私にとってはうまくいきました..

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

于 2013-06-02T04:56:09.593 に答える
0

これは私も見ている問題です。タッチでは発生しません。マウス ホイールを使用した場合にのみ発生するようです。回避策はまだわかりません。1つもないと思います。

于 2012-10-05T15:36:09.173 に答える