我有一个WPF应用程序,我正在尝试使用.Net v4 Visual State Manager设置TextBox样式.具体来说,我试图为MouseOver状态设置Foreground和Background的颜色.
发生的事情是,虽然背景和边界正在完美变化,但前景并非如此.如果我使用的画笔通过StaticResource获得颜色,那么前景根本不会改变.如果我使用的画笔通过DynamicResource获取颜色,那么当我将鼠标悬停在TextBox上时,所有TextBox的前景都会发生变化.显然,要么我做错了,要么我想做的事情根本不可能用VSM(这会令人失望).
以下是我使用的资源:
<Color x:Key="ControlBackgroundColor" R="178" G="178" B="178" A="255" />
<Color x:Key="ControlForegroundColor" R="0" G="0" B="0" A="255" />
<Color x:Key="BorderColor" R="127" G="127" B="127" A="255" />
<Color x:Key="MouseOverControlBackgroundColor" R="0" G="0" B="0" A="255" />
<Color x:Key="MouseOverControlForegroundColor" R="255" G="255" B="255" A="255" />
<Color x:Key="MouseOverBorderColor" R="178" G="178" B="178" A="255" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="ControlBackgroundBrush" Color="{DynamicResource ControlBackgroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="ControlForegroundBrush" Color="{DynamicResource ControlForegroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="BorderBrush" Color="{DynamicResource BorderColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="MouseOverControlBackgroundBrush" Color="{DynamicResource MouseOverControlBackgroundColor}" />
<SolidColorBrush PresentationOptions:Freeze="True" x:Key="MouseOverControlForegroundBrush" Color="{DynamicResource MouseOverControlForegroundColor}" />
<SolidColorBrush …Run Code Online (Sandbox Code Playgroud) 我发现了一个问题,询问如何避免向自己的应用程序资源添加自定义值转换器:
但是我想超越它并注册那些隐含的转换器,如下例所示:
<SolidColorBrush Color="Blue" />
Run Code Online (Sandbox Code Playgroud)
在这里,我假设一些隐含的"StringToSolidColorBrushConverter"正在踢,这使得示例工作.
这个例子并不能正常工作:
<Window.Resources>
<Color x:Key="ForegroundFontColor">Blue</Color>
</Window.Resources>
<TextBlock Foreground={StaticResource ForegroundFontColor}>Hello</TextBlock>
Run Code Online (Sandbox Code Playgroud)
我相信这是因为没有任何证据ColorToSolidColorBrushConverter表明WPF可以拿起并使用它.我知道如何创建一个,但是如何"注册"它以便WPF自动使用它而不在绑定表达式中指定转换器?