0

WPF で ControlTemplates を理解しようとしています。テンプレート化された親の背景色を参照しようとすると、elipse Fill と elipse GradientStop のバインディング ステートメントが異なるようです。これがなぜなのか、誰でも説明できますか。

これは機能します...

<Ellipse RenderTransformOrigin=".5,.5"  Fill="{TemplateBinding Background}">

これは機能します...

<GradientStop Offset="0" Color="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}"/>

これは機能しません - これはなぜですか?

<GradientStop Offset="0" Color="{TemplatedParent Background}"/>

これによりエラーが発生します...

<GradientStop Offset="0" Color="{TemplatedParent Background.Color}"/>

これはうまくいきません...

<Ellipse RenderTransformOrigin=".5,.5"  Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}">

インスタンスはこんな感じ…

        <Button Template="{StaticResource buttonTemplate1}"
            Height="100" Width="100" FontSize="40" 
            Background="Violet" Foreground="Aquamarine"
            Padding="0" Margin="6">Button 5</Button>
4

1 に答える 1

2

Brushコメントで述べたように、とColorタイプのプロパティを区別する必要があります。

  • Brush型のプロパティはコントロールで使用され、 、 、および が含まFillStrokeますBackground
  • の最も一般的な使用法は、 aの色またはaの aの色のColorコンポーネントとしてです。BrushSolidColorBrushGradientStopLinearGradientBrush

投稿した例には、いくつかのバインディング構文エラーもあります。


これは機能しません - これはなぜですか?

<GradientStop Offset="0" Color="{TemplatedParent Background}"/>

これは有効なバインド構文ではありません。しかし、あなたが意図したと仮定すると、ターゲットはソース( )とは異なる型であるTemplateBinding Backgroundため、まだ有効ではありません。ColorBackgroundBrush


これによりエラーが発生します...

<GradientStop Offset="0" Color="{TemplatedParent Background.Color}"/>

上記と同じ問題TemplateBindingですTemplatedParentTemplateBindingそして、ネストされたプロパティでは、いずれにしても機能しないと思います。次のように書く必要があります。

<GradientStop Offset="0" Color="{TemplateBinding 
              RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}" />

これはうまくいきません...

<Ellipse RenderTransformOrigin=".5,.5"  Fill="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background.Color}">

ここでは構文は正しいですが、型が一致しません。ターゲットはBrushで、ソースはSystem.Colorです。

于 2014-07-28T17:00:49.197 に答える