atelier:mitsuba

i love UI/UX, Blend, XAML, Behavior, P5, oF, Web, Tangible Bits and Physical computing. なにかあればお気軽にご連絡ください。atelier@c-mitsuba.com

VSMとかStyleではまる。。。

C#でButtonのForegroundを変えようとして、

for (int i = 0; i < 25; i++)
{
   Button b = this.FindName("b" + i.ToString()) as Button;
   b.Foreground = new SolidColorBrush(Color.FromArgb(255,0,0,0));

とかすると、クリックしていないボタンの色は変わるけど、クリックしたボタンはデフォルトの白のままになります。

これは、ボタンをクリックしたときにVSMが走るのかなんかわかんないけど、b自身の持ってるプロパティの値と、bのテンプレートのプロパティの値が一致しないかららしい。

で、解決方法として、変えたいだけのStyleを用意して、

b.Style = (Style)(this.Resources["ButtonStyleWhite"]);

とか

b.Style = (Style)(this.Resources["ButtonStyleBlack"]);

とかでうまく変わるようになった。

こういうのって、ほんとぱっと見ただけじゃ気づかないから、もういっそコントロール使うときは、一緒にStyleも決めちゃって、コントロール自身のタグには、ForegroundとかBorderBrushとか一切書かないほうが、安全でスマートなのかもしれないですね。