Silverlightのカラーとバインディング
1.カラーをバインドすると実行時エラーになることがある
話が長くなるので結論を先に書くと、バインドでカラーを設定しようとすると、実行時にエラーを起こすと言うことです。
このエラーは、デバッグ中でもそのデバッガが補捉しないようで、表示されたダイアログでデバッグを選ぶと、別途デバッガが起動してしまいます。
- <ControlTemplate x:Key="ct1" TargetType="Button">
- <Grid>
- <Ellipse>
- <Ellipse.Fill>
- <SolidColorBrush Color="{Binding Path=color1}"/>
- </Ellipse.Fill>
- </Ellipse>
- </Grid>
- </ControlTemplate>
ソリッドブラシの色を文字列でバインドするのはOKです。
- <ControlTemplate x:Key="ct1" TargetType="Button">
- <Grid>
- <Ellipse Fill="{Binding Path=color1}" />
- </Grid>
- </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.色の設定方法
- XAMLでBackground、Forground、Fill、BorderBrush などブラシの色を文字列で指定する。
- XANLで、ブラシのColorプロパティを文字列で指定する。
- 名前を付けたコントロールのブラシに、ビハインドコードでブラシオブジェクトを代入する。
- ブラシに文字列をバインドする。
- ブラシにブラシオブジェクトをバインドする。
- ブラシのカラーに文字列をバインドする。
- ブラシのカラーにカラーオブジェクトをバインドする。
が、考えられます。すべてコンパイルできますが、6,7は実行時にエラーになります。
|