トップ回答者
ScrollViewer内の要素上でスワイプ操作を処理させたい

質問
-
こんにちは。お世話になります。
縦方向のみスクロールできる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
回答
-
既にご覧になっているかもしれませんが、
http://blogs.msdn.com/b/wsdevsol/archive/2013/02/16/where-did-all-my-gestures-go.aspx
に理由が解説されてますね。
滑らかな操作感のためには致し方ないようです。
// 横方向のスワイプ時にScrollViewerで何かイベントが出てればどうとでもやり用はあるでしょうけど確認はしてません。
すべての返信
-
既にご覧になっているかもしれませんが、
http://blogs.msdn.com/b/wsdevsol/archive/2013/02/16/where-did-all-my-gestures-go.aspx
に理由が解説されてますね。
滑らかな操作感のためには致し方ないようです。
// 横方向のスワイプ時にScrollViewerで何かイベントが出てればどうとでもやり用はあるでしょうけど確認はしてません。