単純だけど、たまに忘れて悩むときがあるのでメモ
つまづくたびに随時更新します
■XmlSerializerで一部のプロパティが出力されないとき
・publicにし忘れている
・プロパティにsetかgetの片方しか設定していない(主にset忘れ)
■bindingができない
・フィールドにバインディングしようとしている
bindingできるのはプロパティのみ
(→出力にエラーメッセージがでているはず)
2010年6月19日土曜日
2010年6月17日木曜日
Visual Studio 2010でlog4netを使う
.Net Framework4.0 Client Profileでは、System.Webが参照できないので
プロジェクトのプロパティの変更が必要
参考
http://www.atmarkit.co.jp/fdotnet/dotnettips/1021targetfx/targetfx.html
プロジェクトのプロパティの変更が必要
参考
http://www.atmarkit.co.jp/fdotnet/dotnettips/1021targetfx/targetfx.html
2010年5月17日月曜日
ContextMenuのRoutedCommandでハマッタ話
ContextMenuのMenuItemに付けたCommandが灰色(CanExecute==False)になって
実行できない、ということで詰まっていました。
ContextMenuが別ウィンドウ扱い(?)的なことでダメなんだろうなぁと思っていたけど、
解決策をずっと探していて、以下のサイトですっきり解決しました。
http://www.wpftutorial.net/RoutedCommandsInContextMenu.html
これでCommandはちゃんと実行できるし、
イベントハンドラには、引数senderにContextMenuを持っているUI要素が入ってくるので、
UI要素のResourceなどにもアクセスできるようになりました。
実行できない、ということで詰まっていました。
ContextMenuが別ウィンドウ扱い(?)的なことでダメなんだろうなぁと思っていたけど、
解決策をずっと探していて、以下のサイトですっきり解決しました。
http://www.wpftutorial.net/RoutedCommandsInContextMenu.html
これでCommandはちゃんと実行できるし、
イベントハンドラには、引数senderにContextMenuを持っているUI要素が入ってくるので、
UI要素のResourceなどにもアクセスできるようになりました。
2010年5月14日金曜日
MediaPlayerの使い方メモ
・SoundPlayer→軽量だがwavしか再生できない
・Mediaplayer→mp3とかも再生できる
というわけでMediaPlayerを使って最初に書いたコードが以下。
しかしこれでは動かない。
改善すべきは2点。
・Play()は非同期なので、直後にClose()を呼び出すとすぐPlay()が終了する
・同様にPlay()は非同期なので、playerがメソッドローカル変数だと再生が終わる前に
(GCで回収されて?)なくなって、再生されない
というわけで対策は
・MediaPlayerを入れる変数playerはクラス変数に
・Close()は別の箇所に書く
・Mediaplayer→mp3とかも再生できる
というわけでMediaPlayerを使って最初に書いたコードが以下。
var player = new MediaPlayer(); player.Open(new Uri("Resource/sound.mp3", UriKind.Relative)); player.Play(); player.Close();
しかしこれでは動かない。
改善すべきは2点。
・Play()は非同期なので、直後にClose()を呼び出すとすぐPlay()が終了する
・同様にPlay()は非同期なので、playerがメソッドローカル変数だと再生が終わる前に
(GCで回収されて?)なくなって、再生されない
というわけで対策は
・MediaPlayerを入れる変数playerはクラス変数に
・Close()は別の箇所に書く
2010年5月7日金曜日
ContextMenuのStyle変更
違うかもしれない
<Style x:Key="{x:Type ContextMenu}" TargetType="{x:Type ContextMenu}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate> <Border BorderBrush="Black" BorderThickness="3" CornerRadius="5"> <StackPanel IsItemsHost="True" Background="Wheat"/> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
2009年11月17日火曜日
意図しないDataTemplateが適用されたケース
今回も悩んだ話。
たぶん自分で作ったプログラムとか慣れた人の場合ならつまづかないんだろうけど、
他人の作ったプログラムを見ていた時の話。
新しく作ったクラスに
DataTemplateでDataTypeとかちゃんと設定しているはずなのに
違うDataTemplateが適用されてしまうということがありました。
探し回ったら
ItemTemplateSelector
が別途設定されていました。。
たぶん自分で作ったプログラムとか慣れた人の場合ならつまづかないんだろうけど、
他人の作ったプログラムを見ていた時の話。
新しく作ったクラスに
DataTemplateでDataTypeとかちゃんと設定しているはずなのに
違うDataTemplateが適用されてしまうということがありました。
探し回ったら
ItemTemplateSelector
が別途設定されていました。。
2009年11月8日日曜日
Bindingがうまくいかなくてハマッタ話
ハマッタ話ばっかりですね。。(汗
今日も短いです。
Text="{Binding Path=DisplayString}"
として確実にDisplayStringがあるはずなのに表示されなかった事件!
ちゃんとイミディエイトウィンドウではobj.DisplayStringみたいにして見れるんです。
今回もすごく間抜けな原因で、
class XXX {
public string DisplayString;
}
としていました。
簡単ですね。
Binding は 『プロパティ』に対してしなければならないので
class XXX {
public string DisplayString {set; get;}
}
としただけで解決しました。
今日も短いです。
Text="{Binding Path=DisplayString}"
として確実にDisplayStringがあるはずなのに表示されなかった事件!
ちゃんとイミディエイトウィンドウではobj.DisplayStringみたいにして見れるんです。
今回もすごく間抜けな原因で、
class XXX {
public string DisplayString;
}
としていました。
簡単ですね。
Binding は 『プロパティ』に対してしなければならないので
class XXX {
public string DisplayString {set; get;}
}
としただけで解決しました。
登録:
投稿 (Atom)