1

我的问题:

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

我试图达到的目标:

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

  1. 默认按钮
  2. 特殊按钮
  3. 扩展特殊按钮

DefaultButton是我通过带有 ControlTemplate 的样式定义应用程序中按钮样式的地方。

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

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

<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 应具有的图形元素。

但是我希望这个图形元素的填充使用前景色。这种前景色最初是在 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>

有谁知道我可以做些什么来设置绑定,以便它完成我想要做的事情?

4

0 回答 0