2010/08/25 - WPF小ネタ

楽譜表示のUI部分が完成。だいぶWPFに詳しくなった気がする。あとは楽譜表示に戻って8vaとか未実装な部分を実装すればとりあえずは完成か。


てことでWPF関連。プロジェクトを.NET 3.5ベースにしているとうまくいかないけど.NET 4.0ベースにしたらうまくいったケースがあったのでメモ。.NET 4.0はWindows 7デフォルトで入っていないが,Windows Updateに重要な更新で出てくるし,大丈夫でしょう。


1つ目。CheckBoxにbool型のプロパティをtwoway Bindingしている状況で,ある条件のときはsetterで何もせずに返すようなコードを書いた。チェック操作をしたけどチェックできませんでした,みたいなことをしたいのである。

XAML
<CheckBox IsChecked="{Binding IsDisplay, Mode=twoway}">
C#
 bool IsDisplay
 {
     set
     {
         if(xxx)
         {
             return;
         }
         _isdisplay = value;
         PropertyChanged(this, new PropertyChangedEventArgs("IsDisplay"));
     }
     get
     {
         return _isdisplay;
     }
 }

この状態でチェックボックスをオフからオンに変えようとすると,プロパティはfalseのままなのにUIはtrueになってしまって状態が食い違う感じになってしまう。で結局プロジェクトを.NET 4.0ベースにするとうまくチェックがキャンセルされた。


2つ目。以下のようにListBoxでテキストラベルとそれ以外を配置しているようなケースで,テキストラベルを可変長(Width=”100*”とか)にしている場合,ウィンドウを1度でも広げていれば問題はないのだが,ウィンドウ表示時に画面を狭くしていると,レイアウトが崩れてしまう。

2010082501

2010082502

これも結局プロジェクトを.NET 4.0ベースにするとレイアウトが崩れなくなった。

コメントする