更改ControlTemplate中的WPF文本框前景色

更改ControlTemplate中的WPF文本框前景色,wpf,controltemplate,foreground,Wpf,Controltemplate,Foreground,我设计了一些文本框,它们使用控件模板根据视觉状态(鼠标悬停、禁用等)设置背景颜色。代码取自MS的页面 我想做的是根据视觉状态改变前景(字体)的颜色。例如,在鼠标悬停时,我想使文本颜色突出,在禁用时,我想使其变灰 我的xaml(我已经删除了“正常”和“禁用”的VisualState标记以及Border的几个子项): 象牙 粉红色 我首先尝试在序列图像板标签中添加一个新标签,以改变前景,使其看起来像: <Storyboard> <ColorAnimationUsingKeyF

我设计了一些文本框,它们使用控件模板根据视觉状态(鼠标悬停、禁用等)设置背景颜色。代码取自MS的页面

我想做的是根据视觉状态改变前景(字体)的颜色。例如,在鼠标悬停时,我想使文本颜色突出,在禁用时,我想使其变灰

我的xaml(我已经删除了“正常”和“禁用”的VisualState标记以及Border的几个子项):

象牙 粉红色 我首先尝试在序列图像板标签中添加一个新标签,以改变前景,使其看起来像:

<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>