

Win8タブレットにおいて、縦スクロールバーが発生しているウィンドウをスワイプすることによってスクロールを端まで送ると、ウィンドウ自体が跳ね返る（何かにぶつかった？）ようなリアクションを取ります。

これが鬱陶しく感じてしまったため、開発中のアプリケーション(.Net4.5環境/WPF)では無効に出来るならしたいと考えております。  
<https://msdn.microsoft.com/ja-jp/library/ie/hh920761%28v=vs.85%29.aspx>  
の方にcssで制御可能な項目として

> スクロールされた領域が端に達したときに跳ね返る

とされていたのですがWPF、もしくはWindowsフォームにおいてこの機能を与えることは可能なのでしょうか？


CC BY-SA 3.0
2015-03-03T06:51:35.953
7363
2015-03-06T08:44:23.697
6051
question
c# wpf winforms
Win8タブレットのスクロールをスワイプしたときの跳ね返りの無効化


端的に言うと`WndProc`で`WM_GESTURE`を無視すれば「[境界域フィードバック](https://msdn.microsoft.com/ja-
jp/library/windows/desktop/dd371416%28v=vs.85%29.aspx)」は発生しません。しかしこれだけでは全てのジェスチャが無効になってしまうので、`lParam`から`GESTUREINFO`構造体を取得して状態を確認する必要があります。

p/invoke.netに`GESTUREINFO`の定義が無かったので試していませんが、[MSDN](https://msdn.microsoft.com/ja-
jp/library/windows/desktop/dd562167%28v=vs.85%29.aspx)によると`GID_PAN`や`GF_BEGIN`を確認すれば判定可能のようです。


CC BY-SA 3.0
2015-03-03T12:24:15.527
7385
2015-03-03T12:24:15.527
5750
7363
answer


単にバウンドするエフェクトを無効化してしまいたいのであれば、WPFの場合、ListBox等のManipulationBoundaryFeedbackイベントをハンドルするのが一番手っ取り早いと思われます。

[code]

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
    
            list1.ManipulationBoundaryFeedback += list1_ManipulationBoundaryFeedback;
        }
    
        void list1_ManipulationBoundaryFeedback(object sender, ManipulationBoundaryFeedbackEventArgs e)
        {
            e.Handled = true;
        }
    }
    
[/code]

参考:  
UIElement.ManipulationBoundaryFeedback イベント (System.Windows)  
<https://msdn.microsoft.com/ja-
jp/library/system.windows.uielement.manipulationboundaryfeedback.aspx>  
連載：WPF入門：第10回 WPFの「入力イベントとアニメーション」を学ぼう (1/2) - ＠IT  
<http://www.atmarkit.co.jp/ait/articles/1103/01/news124.html>


CC BY-SA 3.0
2015-03-06T08:44:23.697
7543
2015-03-06T08:44:23.697
2947
7363
answer