スレッド一覧は ScrollViewer + StackPanel で作っているのですが、ScrollViewer にはスクロールが終わったことを教えてくれるようなイベントはありません。
仕方なく GestureListener で DragStarted イベントを拾ったりしていたんですが、いまひとつでした。
何か他にないものかと探していたところ、Prism の中に DependencyPropertyListener というステキなクラスがある事を発見しました。
これを使って ScrollViewer のプロパティを監視すればいいじゃないですか。
var scrollViewerListener = new DependencyPropertyListener(); scrollViewerListener.Changed += (s, e) => { if (this.ThreadScrollView.ScrollableHeight == this.ThreadScrollView.VerticalOffset) { System.Diagnostics.Debug.WriteLine("最終行ですよ"); } }; Binding binding = new Binding("VerticalOffset") { Source = this.ThreadScrollView }; this._scrollViewerListener.Attach(this.ThreadScrollView, binding);
こんな感じでほぼイメージ通りの動作をするようになりました。
ただ、WPDT 7.1 のエミュレータだと それなりに動くのですが、 WPDT 7 のエミュレータや 実機だとスレッドを追加するときに画面が止まってしまって かなりストレスがたまります。
Mango へのアップデートが待ち遠しいですね。
2 件のコメント:
こんにちは。
最近、こんな記事を書きました。
http://shinichiaoyagi.blogspot.com/2011/05/wp7-scrollviewer.html
たぶん、内部でやってることはまったく同じなので紹介するまでも無いんですけどね(笑)
青柳さん こんばんは。
ブログ拝見しました。
まさか標準でできるとは思いませんでした、Silverlight ちゃんと勉強しないといけませんね...
ただ、このやり方でも DependencyPropertyListener を使ったやり方でもスクロールが遅い問題はかわらないようです。
Mango までは 一番最初の MORE ボタン方式に戻すことにしました。
コメントを投稿