Condiational属性と組み合わせてデバッグ時にだけ表示されるコントロールを作る
デバッグするときにどうしても確認したいことがあるけど、どうやって確認しよう…ロジック部分なら最悪デバッガーで止めながら見れるけど、バインディングってどうやってみようかな…そういうときはこれを試してみるといいかも。
Conditional属性ってなに
void型のメソッドにつけることができる属性です。これをつけると、ある指定した環境変数があるときだけそのメソッドが実行されるようになります。
たとえば
[Conditional("DEBUG")] void Hoge() { /**/ }
というメソッドは、DEBUGという変数があるときだけ実行されます。ないときはなかったことになるのでパフォーマンスにも影響はありません。
いや、#ifがあるじゃん…
確かにそうなんですが、あれってそこら中に散らばりやすいのと、構文を完全に無視して条件を構築できちゃうのであまりお行儀がよろしくないです。なので、Condiational属性くらいの縛りプレイをしておいたほうがかえっていいのかもしれません。
で、これを使ってAppクラスあたりにひとつ静的プロパティでも作っておいて、起動時に上のメソッドでフラグでも立ててやればOK。
静的プロパティへのバインディングのしかた
書き方は
{Binding Source={x:Static local:App.IsDebug}}
です。x:staticって今まで知らなかった人多いと思います。私も最近知りました。あとはこれにコンバーターをかませてboolをVisibilityに変換すればデバッグ中だけ表示されるコントロールが作れます。直接Visibilityを捜査してもよかったのですが、できればフラグは少ないほうがいいよねってことでこのようにしました。
ただ…
なんかこれ、個人的にすごくダサいと思う。実装楽なんですけどね。添付プロパティを使うとうまく書けそうな気もしますがうまくいかない…うーん…