我的问题:
我无法弄清楚如何在针对特定控件的样式中的属性A 的setter的'Setter.Value'字段内部如何绑定到< em>属性B 该特定控件。更具体地说,我想在Button的Content属性的可视树内的图形元素上使用Foreground画笔值。这将确保图形元素始终具有为此按钮控件设置的前景色。
我尝试实现的目标:
我正在开发一个WPF应用程序,我有三个按钮控件:
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>
有谁知道我可以做些什么来设置绑定,以便它按照我的意图去做?