如何更改ContentPresenter Color WPF

时间:2013-06-16 14:18:06

标签: wpf expression-blend

我在WPF中有一个自定义按钮。在禁用状态下,我希望它的内容颜色可以改变,但我无法做到这一点。我正在使用Blend for Visual Studio。当我去编辑模板并选择contentPresente的画笔颜色时,它表示该值无效。我怎样才能做到这一点 ?我试图在XAML中更改它,这是我使用的代码但是有错误。

<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="contentPresenter">
    <EasingColorKeyFrame KeyTime="0" Value="Black" />
</ColorAnimationUsingKeyFrames>

2 个答案:

答案 0 :(得分:10)

ContentPresenter本身没有任何Visual Style。它只是ContentControl所占据的占位符。

要修改自定义Style的{​​{1}}中的Foreground,您可以使用ButtonStyle.ControlTemplate的附加属性TextElement.Foreground } {} {}} {/ p>

ContentPresenter

您可以通过TriggerIsEnabled="False" via blend为同一财产执行相同操作。

注意:

非常重要的是要理解,通过这样做^^我们假设... <ControlTemplate.Triggers> ... <Trigger Property="IsEnabled" Value="False"> <Setter TargetName="contentPresenter" Property="TextElement.Foreground" Value="Red" /> </Trigger> </ControlTemplate.Triggers> ... 使用此StoryboardVisualStateManager作为一些文本。如果您的Button与其他Style不同(例如Content),您将看不到它变为“红色”。

答案 1 :(得分:1)

使用ControlTemplate.ResourcesTargetType找到了一种“Hacky”方式为任何元素执行此操作:

<ControlTemplate x:Key="GlyphButton" TargetType="{x:Type Button}">
  <ControlTemplate.Resources>
    <Style TargetType="{x:Type fa:ImageAwesome}">
        <Setter Property="Foreground" Value="Gray"/>
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsMouseOver, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}" Value="true">
                <Setter Property="Foreground" Value="#FF048758"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
  </ControlTemplate.Resources>
  <ContentPresenter/>
</ControlTemplate>

可悲的是,你不能以这种方式使用按钮VisualStateManager