2017-09-29 12 views
1

シェイダーを使用してレンダリング方法を変更するクラスがあります。シェーダエフェクトの塗りとアウトラインのプロパティをベースコントロールの塗りとアウトラインのプロパティにバインドしたいと思います。WPFバインディングプロパティを持つルートコントロールテンプレートの効果を設定する

以下のxamlは効果がありません。シェーダは機能しますが、プロパティはバインドされていません。

<Style TargetType="{x:Type local:RCTLabel}"> 
    <Setter Property="Effect"> 
     <Setter.Value> 
      <effects:SpriteFontEffect Fill="{Binding Fill}" Outline="{Binding Outline}"/> 
     </Setter.Value> 
    </Setter> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type local:RCTLabel}"> 

      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

以下のコードは機能しますが、コード内ではなくxaml内のコントロールをバインドしたいと考えています。

SpriteFontEffect shader; 

public RCTLabel() { 
    shader = new SpriteFontEffect(); 
    Effect = shader; 
} 

private static void OnFillChanged(object sender, DependencyPropertyChangedEventArgs e) { 
    var element = (RCTLabel)sender; 
    element.shader.Fill = element.Fill; 
} 
private static void OnOutlineChanged(object sender, DependencyPropertyChangedEventArgs e) { 
    var element = (RCTLabel)sender; 
    element.shader.Outline = element.Outline; 
} 

答えて

0

この結合式はちょうど同じSpriteFontEffectインスタンスのFillプロパティにFillプロパティをバインド! (私は= 2 INTを考える; I = I;

Fill="{Binding Fill}" 

RCTLabelのFillプロパティにバインドするには、RelativeSourceを使用します。

Fill="{Binding Fill, RelativeSource={RelativeSource AncestorType=RCTLabel}}" 

Hereはでデータバインディング式のために良いリファレンスですWPF。

+0

ありがとうございます!欠けているのは、RCTLabel AncestorTypesの前にある 'local:'だけです。 –

関連する問題