我在WPF中有一个自定义按钮。在禁用状态下,我希望它的内容颜色可以改变,但我无法做到这一点。我正在使用Blend for Visual Studio。当我去编辑模板并选择contentPresente的画笔颜色时,它表示该值无效。我怎样才能做到这一点 ?我试图在XAML中更改它,这是我使用的代码但是有错误。
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Shape.Fill).(SolidColorBrush.Color)" Storyboard.TargetName="contentPresenter">
<EasingColorKeyFrame KeyTime="0" Value="Black" />
</ColorAnimationUsingKeyFrames>
答案 0 :(得分:10)
ContentPresenter本身没有任何Visual Style
。它只是Content
中Control
所占据的占位符。
要修改自定义Style
的{{1}}中的Foreground
,您可以使用Button
上Style.ControlTemplate
的附加属性TextElement.Foreground
} {} {}} {/ p>
ContentPresenter
您可以通过Trigger
或IsEnabled="False"
via blend为同一财产执行相同操作。
注意:强>
非常重要的是要理解,通过这样做^^我们假设...
<ControlTemplate.Triggers>
...
<Trigger Property="IsEnabled"
Value="False">
<Setter TargetName="contentPresenter"
Property="TextElement.Foreground"
Value="Red" />
</Trigger>
</ControlTemplate.Triggers>
...
使用此Storyboard
将VisualStateManager
作为一些文本。如果您的Button
与其他Style
不同(例如Content
),您将看不到它变为“红色”。
答案 1 :(得分:1)
使用ControlTemplate.Resources
和TargetType
找到了一种“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
。