iPhoneは、Silverlight ListBoxでのスクロールが好き
-
03-07-2019 - |
質問
SilverlightのIPhoneのような機能を備えたリストボックスが必要です。つまり、アニメーションスクロール、およびクリックしてドラッグしてスクロールします。スクロールは、「速度」に基づいたマウスアップイベントの少し後に続きます。ドラッグの。これを検索したところ、これを提供しているコントロールベンダーは見つかりませんでした。質問は、どのように構築すればよいですか?始めるにはいくつかのヒントが必要です。
この質問には2つの部分があります:
パート1、リストボックスのアニメーションスクロールを取得する方法。
パート2、「ドラッグ可能」を作成する方法スクロールするには、キャンバスを上に置いてマウスイベントを追跡し、物理学をシミュレートする必要があると思います。ここでのいくつかのヒントは素晴らしかったでしょう。
Larsiに感謝します。
解決
少し前に、このようなことをするコントロールを作成しました。私がやったことは、キャンバス内にスタックパネルを置くことだけでした。マウス移動でスタックパネル全体のcanvas.topを調整するだけです(マウスが押されている間)。マウスアップ後のスクロールをアニメーション化するには、実際に移動量を追跡し、canvas.topプロパティにアニメーションを適用する必要があります。
他のヒント
これは、ドラッグスクロールと自動フリック/慣性スクロールの両方を行うWPFの非常に素晴らしい完全なサンプルです。 Silverlightで機能させるために何か変更する必要があるかどうかはわかりません。
http: //sachabarbs.wordpress.com/2009/12/24/friction-scrolling-now-an-wpf-attached-behaviour-too/
マウス入力をキャプチャする子(ボタンなど)をクリックした場合、現状ではビューをクリックしてドラッグすることはできないことに注意してください。実際にこのサンプルを変更して、子をクリックしたときにスクロールをドラッグできるようにしましたが、スクロールしていないときに子がマウス入力を受け入れるようにしました。
これはSilverlight 2よりもSilverlight 3の方が簡単ですが、2では不可能ではありません。
MIX 09からのこのビデオ Microsoft Silverlightコントロールの構築が役立ちます。
Sacha BarberのWebサイトからの別の投稿:
Jeremiah Morrillは、カスタムContentControl(付属のScrollViewerでテンプレート化)で慣性を伴うアニメーションスクロールを実装するコードを共有しています
<ScrollViewer x:Name="sv1" Width="500" Height="285">
<StackPanel x:Name="sp1" Width="450" Height="285">
</StackPanel>
</ScrollViewer>
位置を設定することにより。そして否定。 scrollviewer内のstackpanelへのマージン スクロール効果を作成できます。
onScroll_Up()
{
//Change this based on your scrollviewer dimension
if (this.sv1.ScrollableHeight < 300)
{
Thickness thickness = this.sp1.Margin;
thickness.Top += 50;
this.sv1.SetValue(StackPanel.MarginProperty, thickness);
}
}
onScroll_Down()
{
if (this.sv1.ScrollableHeight > 1)
{
Thickness thickness = this.sp1.Margin;
thickness.Top += -50;
this.sv1.SetValue(StackPanel.MarginProperty, thickness);
}
}