高さの違う項目を表示したときの ListBox がたがたスクロール問題とその回避方法

ひとり Advent Calendar 13日目です。

今日も WP7 不具合とその回避方法第2弾。

今日のネタは、はまったことある方も多いんじゃないでしょうか?
必須コントロール ListBox の不具合ですから。
私もこれは Nel を作っていた際に発見した不具合で、何故このような事が起きるのか全く分かりませんでした。
が、発生条件が分かったらその対処まではすごく簡単でした。WM での経験が生きているのかなー。

というわけで今日は、

高さの違う項目を表示したときの ListBox がたがたスクロール問題とその回避方法
http://smart-pda.net/wp7/tips/listBox_flicker_scroll/

NetAdvantage for windows phone 7 の良かった点・残念だった点

Infragistics さんの NetAdvantage for Windows Phone7 「コミュニティプログラム」の公開期限が今月末までなので、今作っているコミックビューア "Mil" でコンポーネントを使ってみました。

InfoBox

画像のような Tooltip が簡単に表示することが出来ます。
WP7 標準の Popup 使っても作ることは出来ますが、色々実装するのは面倒なので気軽に使える InfoBox が用意されているのはうれしいですね。

InfoBox クラスに Tap などのイベントがあるので、ControlStoryboardAction や NavigateToPageAction をくっつけてみましたが動きませんでした。

残念。

メッセージに「詳しい情報はここをタップ」→「ヘルプページに遷移」ということをやりたかったのですが、出来ないみたいですね。
イベントハンドラなら動くかと思ってコードビハインド上に書いてみましたがダメ。

残念。

Slider

WP7 標準の Slider は何故かドラッグでスライドさせていくことが出来ず、タップしていくと値が進んでいくというスライダーです。
NetAdvantage のスライダーはドラッグしてスライドしてくれる優れものです。

とはいうものの。WP7 標準の Slider から入れ替えてそのまま動くのだと思ったら、ちょっと違う。

Value 別のコンロトール.Opacity (Twoway) でバインドしてみたところ、ドラッグしてもするするスライドせず。
また Maximim 1.0, Minimum 0.3, LargeChange 0.1, SmallChange 0.01 にしたのですが、スライダーで動作する位置がなんか変。一番右端までスライドしなかったり、一番左端に到達したらもう動かなかったり。

残念。

あとスライダーの左右に "+", "-" ボタンを用意してスライダーとボタン両方で値を変更できるようにしています。
Button に ChangePropertyAction をくっつけて Click されたら、Slider.Value を -0.1 / 0.1 を Increment という設定にしており、これでボタンをタップするとスライダーの値が -0.1 / 0.1 ずつ進みます。

NetAdvantage のスライダーでも出来るかと思いきや、Button に Value はないというエラーメッセージ。
ボタンからコントロール作ってるのね。

残念。

まとめ

私は、趣味で WP7 アプリを公開してますが、もちろん仕事でも WP7 アプリを作って納品してます。

チャートのようにはじめから自作をあきらめる場合は、各種コントロールを試してみて一番良いのを購入して開発することが多いです。こういう場合は、あらかじめ色々試した上で購入するので、のちのち問題が発生する事はあまり多くありません。

でも逆に標準のものがかっこわるいから変えたいな−、というときはできるだけ WP7 標準と置き換えが簡単な物だとありがたいです。
コントロールのためだけに色々変えるのは避けたいというのが正直なところ。

重箱の隅をつつくようで、すいません。
私の使う範囲では、細かいところで期待していた動作をしないことが何点かありました。

チャートは良くできています。ビジネス向けアプリ作るときは、チャートをいちいち自作してられないので、非常に役に立つと思います。

Landscape 時に ScrollViewer.Opacity != 1.0 時にスクロール方向が逆転する 不具合

ひとり Advent Calendar 12日目です。
WP7 も以外と不具合あるんですよ。
多くは回避できる不具合なんですが、不具合が発生したときにはまず自分を疑いますよね。自分のコードのどこかがおかしいんじゃないかって。

それで時間をかけて色々調査して、結局 WP7 に不具合を発見。

不具合があるのは仕方ないんですが、時間と労力が半端無いですよね。
あと報告しても、おまえさんが悪いんだろという扱いを受けるのがデフォルトなので、そこがイヤ。

今日の不具合は、多くの人はあんまり影響ないと思いますが ScrollViewer の不具合。

というわけで今日は、

Landscape 時に ScrollViewer.Opacity != 1.0 時にスクロール方向が逆転する 不具合
http://smart-pda.net/wp7/tips/scrollviewr_drag_bug/

Windows Phone で使える素材集

ひとり Advent Calendar 11日目です。
WP7 用漫画ビューアの開発をしてたらちょっと時間が押してしまいました。

今日は WP7 で使えるアイコン・素材集のお話 @ch3cooh とかぶってますが、自分のリンク集としてまとめました(言い訳)
WP7 用基本のアイコン集もいいですが、openclipart.org がすっごくおすすめ。

というわけで今日は、

Windows Phone で使える素材集
http://smart-pda.net/wp7/tips/icon_resources/

閑話休題 〜 PictureHub の落とし方 〜

ひとり Advent Calendar 10日目です。
今日はちょっと休憩で、PictureHub のお話。

実は PictureHub を確実に落とすことが出来ます。
まず Skydrive に 1000枚ほど写真をアップします。それを WP7 の PictureHub でアップしたアルバムを見るだけ。

するするスクロールさせていくと、あるとき落ちます。感覚的には高速にスクロールさせていくと落ちる確率が上がるようです。

おそらく OutOfMemoryException が発生している予感。

それはともかく WinForm の Image には Dispose + System.GC.Collect() で使用しなくなった画像を明示的にメモリから削除することが出来ました。
しかし WPF/Silverlight になってからは、システムが適当にやってくれているようで明示的に Dispose 出来ないんですよね。
null を代入してやればいいのかもしれないですが・・・
ちなみに大量の画像を使用した後には System.GC.Collect() をするといくらかは回収されるようですので、OOM が発生したら試してみてください。

というわけでおやすみなさい。

ScrollViewer を巡るまとめ

ひとり Advent Calendar 9日目です。
今日は画像から ScrollViewer の話へ。
なんだかんだとお世話になっている ScrollViewer。あまり Tips 的な事はないのですがとりあえずまとめです。

というわけで今日は、

ScrollViewer を巡るまとめ
http://smart-pda.net/wp7/tips/scrollviewer_tips/

PNG ファイルの出力、GIF ファイルの読み込み

ひとり Advent Calendar 8日目です。
今日もまたまた画像関連。以外となさそうで以外とありそうな気がしないわけでもない、PNG の出力や GIF の読み込みです。
WP7 だと PNG の読み込みは出来るんですけれど、出力は出来ないんですよね。
基本は JPEG 一本槍。
それで問題はないのですが、以外と用途はあるかもしれないですね。

というわけで今日は、

PNG ファイルの出力、GIF ファイルの読み込み
http://smart-pda.net/wp7/tips/image_readwrite_png/