mikeo_410


Silverlightのカラーとバインディング

1.カラーをバインドすると実行時エラーになることがある

  話が長くなるので結論を先に書くと、バインドでカラーを設定しようとすると、実行時にエラーを起こすと言うことです。
  このエラーは、デバッグ中でもそのデバッガが補捉しないようで、表示されたダイアログでデバッグを選ぶと、別途デバッガが起動してしまいます。

  1. <ControlTemplate x:Key="ct1" TargetType="Button">
  2.     <Grid>
  3.         <Ellipse>
  4.             <Ellipse.Fill>
  5.                 <SolidColorBrush Color="{Binding Path=color1}"/>
  6.             </Ellipse.Fill>
  7.         </Ellipse>
  8.     </Grid>
  9. </ControlTemplate>

   ソリッドブラシの色を文字列でバインドするのはOKです。

  1. <ControlTemplate x:Key="ct1" TargetType="Button">
  2.     <Grid>
  3.         <Ellipse Fill="{Binding Path=color1}" />
  4.     </Grid>
  5. </ControlTemplate>

2.Silverlight の Colors は 14色

  C#の(ビハインドコード)を編集していて気が付くのは、"Colors."と打ち込んで表示されるメンバの一覧に14色しかないことです。
  XAMLの記述では、Background=""のような箇所では140の色名が表示されます。
  <SolidColorBrush Color=""/>
  のような箇所でも140色あります。
  WPFアプリケーションなら、Colorsも140色あります。
  この理由は私にはわかりません。
  Backgroundで選んでいるのは、Colorsのメンバではなくブラシだからと言うことでもないようです。
 14色以外の色を指定することは、エラーとは関係ないようです。

3.色を文字列で指定すること

  XAMLを記述するときには、ブラシもColorも文字列で色を指定します。
  ビハインドコードでは、SolidColorBrushやColorクラスのオブジェクトが対応します。
  また、バインディングをする場合は、文字列もオブジェクトも記述できます。

4.色の設定方法

  1. XAMLでBackground、Forground、Fill、BorderBrush などブラシの色を文字列で指定する。
  2. XANLで、ブラシのColorプロパティを文字列で指定する。
  3. 名前を付けたコントロールのブラシに、ビハインドコードでブラシオブジェクトを代入する。
  4. ブラシに文字列をバインドする。
  5. ブラシにブラシオブジェクトをバインドする。
  6. ブラシのカラーに文字列をバインドする。
  7. ブラシのカラーにカラーオブジェクトをバインドする。

  が、考えられます。すべてコンパイルできますが、6,7は実行時にエラーになります。


mikeo_410@hotmail.com