2017-09-29 34 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屬性! (認爲​​INT I = 2; I = I;

Fill="{Binding Fill}" 

要綁定到的RCTLabel Fill屬性,使用的RelativeSource:

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

Here爲數據綁定表達式在一個很好的參考WPF。

+0

謝謝你的工作!唯一缺少的是RCTLabel AncestorTypes前面的'local:'。 –

相關問題