更改ControlTemplate中的WPF文本框前景色
我设计了一些文本框,它们使用控件模板根据视觉状态(鼠标悬停、禁用等)设置背景颜色。代码取自MS的页面 我想做的是根据视觉状态改变前景(字体)的颜色。例如,在鼠标悬停时,我想使文本颜色突出,在禁用时,我想使其变灰 我的xaml(我已经删除了“正常”和“禁用”的VisualState标记以及Border的几个子项): 象牙 粉红色 我首先尝试在序列图像板标签中添加一个新标签,以改变前景,使其看起来像:更改ControlTemplate中的WPF文本框前景色,wpf,controltemplate,foreground,Wpf,Controltemplate,Foreground,我设计了一些文本框,它们使用控件模板根据视觉状态(鼠标悬停、禁用等)设置背景颜色。代码取自MS的页面 我想做的是根据视觉状态改变前景(字体)的颜色。例如,在鼠标悬停时,我想使文本颜色突出,在禁用时,我想使其变灰 我的xaml(我已经删除了“正常”和“禁用”的VisualState标记以及Border的几个子项): 象牙 粉红色 我首先尝试在序列图像板标签中添加一个新标签,以改变前景,使其看起来像: <Storyboard> <ColorAnimationUsingKeyF
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(TextBox.Background).Color">
<EasingColorKeyFrame KeyTime="0" Value="{StaticResource EditableControlHiLightColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" Storyboard.TargetProperty="(TextBox.Foreground).Color">
<EasingColorKeyFrame KeyTime="0" Value="{StaticResource EditableControlHiLightTextColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
但这没有效果——文本颜色保持不变
我认为这是由于位于顶部的,所以我尝试将标记设置为ControlTemplate的子级。VisualStudio没有这些功能。(找不到前台类型。请确认您没有缺少程序集引用,并且所有引用的程序集都已生成。)
我已经仔细看了一下,似乎有点关系,但在我的例子中,我试图改变的是模板
那么,如何使用视觉状态更改控件模板中文本框的前景(字体)颜色?似乎我们只能通过更改文本框前景来更改ScrollViewer前景。为此,您可以使用触发器:
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource ControlDisabledForeground}"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource ControlReadOnlyForeground}"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
您可以在此处看到完整的代码:
<ControlTemplate.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource ControlDisabledForeground}"/>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsReadOnly" Value="True">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="{StaticResource ControlReadOnlyForeground}"/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>