我有一个使用着色器来修改其渲染方式的类。我想将着色器效果的Fill和Outline属性与基本控件的Fill和Outline属性绑定。
下面的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 :(得分:0)
此绑定表达式只是将Fill属性绑定到相同SpriteFontEffect实例的Fill属性! (想想 int i = 2; i = i; )
Fill="{Binding Fill}"
要绑定到RCTLabel
的Fill属性,请使用RelativeSource:
Fill="{Binding Fill, RelativeSource={RelativeSource AncestorType=RCTLabel}}"
Here是WPF中DataBinding表达式的一个很好的参考。