2009-03-23 11 views
1

なぜこのXAMLコードが機能しないのかわかりません。 TemplateBinding(下記参照)を使用する場合、背景色はではなく、に設定されています。しかし、通常の色文字列(「赤」)を使用すると、正常に動作します。WPFでは、TemplateBindingを使用しているときにRectangle.Fillプロパティが機能しないように見えるのはなぜですか?

しかし
<ControlTemplate x:Key="InstanceButtonTemplate" TargetType="{x:Type Control}"> 
    <Grid> 
     <Rectangle> 
      <Rectangle.Fill> 
       <SolidColorBrush Color="{TemplateBinding Background}"></SolidColorBrush> 
      </Rectangle.Fill> 
     </Rectangle> 
    </Grid> 
</ControlTemplate> 

、私はこの方法でTemplateBindingのを使用する場合、それが正常に動作...

<ControlTemplate x:Key="InstanceButtonTemplate" TargetType="{x:Type Control}"> 
    <Grid> 
     <Rectangle Fill="{TemplateBinding Background}"></Rectangle> 
    </Grid> 
</ControlTemplate> 

任意のアイデア?

編集:明確にする、私は私が代わりにプレーンな文字列のXAMLを使用してRectangle.Fillプロパティに割り当てることができるようにする必要があります理由です、むしろグラデーションブラシを使用するために、これを拡大していきます。色は異なるタイプがあるためである

答えて

5

その後、背景

背景には、色がブラシでます。..うまく色が..あなたは色にあなたのブラシを変換するために、IValueConverterを使用することができます。..

HTH

+0

これは私の考えでもありましたが、Intellisenseを使って見ましたが、Background(コントロール)は実際には色ではなくブラシです。 – willem

+0

@willemo、それはまさにそれです。背景はブラシで、Rectangle.Fillはブラシです。 SolidColorBrush.ColorをBackgroundプロパティに設定すると、SolidColorBrush.ColorがColorで、BackgroundがBrushなので失敗します。 Rectangle.Fill =背景は両方のブラシに行く方法です。 – Rich

+0

または、ブラシを色に変換できるIValueConverterの厄介な実装を書いてください...あなたはブラシのすべての異なる種類のブラシを扱わなければなりません。ブラシの詳細はこちらhttp://msdn.microsoft.com/en-us/ /library/aa970904.aspx – Arcturus