以下样式按预期工作(剥离不相关的道具):
<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
中放置共享画笔并为其颜色设置动画(但后来我得到与线程/冻结相关的异常)。
答案 0 :(得分:1)
根据MSDN
...只有定义样式的框架元素才能直接定位。
因此无法定位命名样式部分。
它建议您从样式目标向下点到要更改的属性,这就是您所做的。鉴于此,我认为这是你能做到的最好的。
使用Storyboard.TargetProperty
作为Google搜索字词找到的结果