WPF设置具有绑定属性的根控制模板的效果

时间:2017-09-29 23:57:13

标签: c# wpf xaml

我有一个使用着色器来修改其渲染方式的类。我想将着色器效果的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;
}

1 个答案:

答案 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表达式的一个很好的参考。