2012-04-28 19 views
5

私はいくつかのコントロールをホストするためにWPF ScrollViewerを使用しています。私はあなたがそれをあまりにも遠くに引っ張ると、それがゆっくりと元気に戻っていくタッチデバイスのようにやりとりするのが本当に好きです。ScrollViewerを「バウンシー」にする簡単な方法はありますか?

これは、スクロールバーを持っていない - 私は手動でマウスがこのコードを使用してクリックし、ドラッグしてスクロールを持っている:

Point currentPoint = e.GetPosition(this); 

// Determine the new amount to scroll. 
Point delta = new Point(scrollStartPoint.X - currentPoint.X, scrollStartPoint.Y - currentPoint.Y); 

if (Math.Abs(delta.X) < PixelsToMoveToBeConsideredScroll && 
    Math.Abs(delta.Y) < PixelsToMoveToBeConsideredScroll) 
    return; 

scrollTarget.X = scrollStartOffset.X + delta.X; 
scrollTarget.Y = scrollStartOffset.Y + delta.Y; 

// Scroll to the new position. 
sv.ScrollToHorizontalOffset(scrollTarget.X); 
sv.ScrollToVerticalOffset(scrollTarget.Y); 

はこれを行う簡単な方法はありますか?現在のところ、通常のスクロールテキストボックスのように機能し、通常の範囲外に引っ張ったり、ゆっくりと戻ったりすることもありません。

+0

http://aniscrollviewer.codeplex.com/を参照してください。私はコードをチェックアウトしていませんが、標準の 'ScrollViewer'を拡張してアニメーションアップデートからの位置を更新しています。 – ChrisF

+0

ありがとう@ChrisFしかし、その例は滑らかなスクロールだけであり、どんなタイプの「タッチオーバードラッグ」のやり取りを与えたり、スムーズに通常の範囲内に戻ることはありません。 – kvanberendonck

+0

ああ - 別のイージー機能を使用できませんか? – ChrisF

答えて

1

タッチデバイスで作業している場合は、Microsoft SurfaceScrollViewer(http://msdn.microsoft.com/en-us/library/microsoft.surface.presentation.controls.surfacescrollviewer.aspx)を参照してください。既にこの動作が組み込まれています。

タッチインタラクションの権利取得は手間がかかり、既に完了している他の誰かを見つけるのが容易です。 ;-)

+0

残念なことにタッチデバイス用ではなく、デスクトップ用です。 – kvanberendonck

関連する問題