none
ScrollViewer内の要素上でスワイプ操作を処理させたい RRS feed

  • 質問

  • こんにちは。お世話になります。

    縦方向のみスクロールできるScrollViewer内で、
    横方向のスワイプ操作で特定の処理を行いたいのですが、
    実現することは可能でしょうか?

    現在、調べて分かっていることとして、以下のことがあります。

    ① スクロール領域内に存在するの要素(UIElement)で横方向のスワイプ操作を行っても、
      PointerPressed以外のPointerイベント (PointerMoved、PointerReleased) が発生しない。

    ② スクロール領域内に存在するの要素のManipulationModeにTranslateXを設定すると、
      Pointerイベント、および、Manipulationイベントは発生するようになるが、
      TranslateXを指定した要素上では縦スクロールができなくなる。

    ③ ScrollViewerの3つのプロパティHorizontalScrollMode、VerticalScrollMode、
      ZoomModeを無効にするとPointerイベント、および、Manipulationイベントが発生するが、
      縦スクロールができなくなる。

    ④ ③でScrollViewer内の要素から拾ったPointerイベント/Manipulationイベントを元に
      ScrollViewer.ChangeView()で独自にスクロール制御を実装すると、
      スワイプとスクロールを両立させることはできる。
      ただし、「UIの仮想化」を利用したItemsControlなどのリスト表示ではスクロール中に
      引っかかる様な感触ができてしまい、またスクロール領域境界のバウンスも無効になる。
      → 擬似的なスクロール制御ではなく、標準のスクロール制御で実現させたい

    ※ ①~④の全てにおいてScrollViewerのプロパティHorizontalScrollMode、
      ZoomModeは無効に設定している。


    なお、以下の環境でアプリを開発しています。

    OS: Windows 8.1 Pro
    IDE: Visual Studio Premium 2013
    言語: C# / XAML
    開発対象: Windows ストアアプリ (Windows 8.1 向け)

    アドバイスの程、よろしくお願い致します。

    • 編集済み Y.Ichise 2013年12月17日 7:53
    2013年12月17日 6:59

回答

すべての返信