无法绑定到templatedparent的属性以在wpf中设置样式设置器内部的值

时间:2012-08-30 14:49:58

标签: wpf xaml binding styles relativesource

我的问题:

我无法弄清楚如何在针对特定控件的样式中的属性A 的setter的'Setter.Value'字段内部如何绑定到< em>属性B 该特定控件。更具体地说,我想在Button的Content属性的可视树内的图形元素上使用Foreground画笔值。这将确保图形元素始终具有为此按钮控件设置的前景色。

我尝试实现的目标:

我正在开发一个WPF应用程序,我有三个按钮控件:

  1. DefaultButton
  2. SpecialButton
  3. ExtendedSpecialButton
  4. DefaultButton 是我通过带有ControlTemplate的样式定义应用程序中按钮样式的地方。

    SpecialButton 引入了一个不应该用于常规按钮的新属性。此属性将由我通过样式设置器定义的一个可视状态表示。除此之外,它与DefaultButton的外观相同。

    我通过将它基于DefaultButton的样式来定义此SpecialButton的样式。在这种风格中,没有ControlTemplate只有一个MultiTrigger响应,基于几个属性条件设置了几个视觉属性:

    <Style x:Key="SpecialButtonStyle" TargetType="{x:Type MyControls:SpecialButton}" BasedOn="{StaticResource DefaultButtonStyle}">
        <Style.Triggers>
            <MultiTrigger>
                <MultiTrigger.Conditions>
                    <Condition Property="IsActive" Value="false"/>
                    <Condition Property="IsMouseOver" Value="false"/>
                </MultiTrigger.Conditions>
                <Setter Property="BorderBrush" Value="{DynamicResource ButtonDisabledBorder}" />
                <Setter Property="Background" Value="{DynamicResource ButtonDisabledBg}" />
            </MultiTrigger>
        </Style.Triggers>
    </Style>
    

    这一切都很有效。

    下一步也没问题: 我想将 ExtendedSpecialButton 基于 SpecialButton ,并在按钮内设置默认的形状内容。

    <Style x:Key="ExtendedSpecialButtonStyle" TargetType="{x:Type MyControls:ExtendedSpecialButton}" BasedOn="{StaticResource SpecialButtonStyle}">
        <Setter Property="Content">
            <Setter.Value>
                <Rectangle Fill="Black" Height="5" Width="15"></Rectangle>
            </Setter.Value>
        </Setter>
    </Style>
    

    DefaultButton的原始样式仍然存在 - 响应SpecialButton的IsActiveProperty的添加的可视状态仍在我们身边 - 而ExtendedSpecialButton也继承了由 SpecialButton 的MultiTrigger创建的可视行为

    我还成功显示了此ExtendedSpecialButton应具有的图形元素。

    但是我希望这个图形元素的填充使用Foreground颜色。此前景色最初在DefaultButton中设置样式,对于两个第一个按钮效果很好。

    以下代码是我目前认为应该如何进行此类绑定的代码。但这不起作用:

       <Style x:Key="ExtendedSpecialButtonStyle" TargetType="{x:Type MyControls:ExtendedSpecialButton}" BasedOn="{StaticResource SpecialButtonStyle}">
        <Setter Property="Content">
            <Setter.Value>
                <Rectangle Fill="{Binding RelativeSource={RelativeSource TemplatedParent}}" Height="6" Width="20"></Rectangle>
            </Setter.Value>
        </Setter>
    </Style>
    

    有谁知道我可以做些什么来设置绑定,以便它按照我的意图去做?

0 个答案:

没有答案