以下样式按预期工作(剥离了不相关的道具):
<Style TargetType="PasswordBox">
<Setter Property="Background">
<Setter.Value>
<VisualBrush>
<VisualBrush.Visual>
<Canvas>
<Path>
<Path.Stroke>
<SolidColorBrush Color="{x:Static SystemColors.HighlightColor}"/>
</Path.Stroke>
</Path>
</Canvas>
</VisualBrush.Visual>
</VisualBrush>
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.GotFocus">
<BeginStoryboard>
<Storyboard>
<ColorAnimation Storyboard.TargetProperty="Background.Visual.Children[0].Stroke.Color"
To="{x:Static SystemColors.WindowColor}"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
...但我怀疑这是最好的方法。这里有一件丑陋的事情是必须从一路到笔画颜色ColorAnimation
进行长时间的PropertyPath
遍历。PasswordBox
有没有办法缩写或整理这段代码?有没有办法重构它以使PropertyPath
遍历更短?
到目前为止,我已经尝试将情节提要移入Path.Resources
(但后来我无法从中引用它Style.Triggers
);并放入一个共享画笔Style.Resources
并为其颜色设置动画(但随后我得到与线程/冻结相关的异常)。