次のスタイルは意図したとおりに機能します(無関係な小道具は削除されます)。
<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>
...しかし、これが最善の方法だとは思えません。ここでの醜いことの1つは、ストロークの色に至るまでColorAnimation長いPropertyPathトラバースを実行する必要があることです。PasswordBox
このコードを省略または整理する方法はありますか?PropertyPathトラバーサルが短くなるようにリファクタリングする方法はありますか?
これまで、ストーリーボードをに移動しようとしましたPath.Resources(ただし、から参照することはできませんでしたStyle.Triggers)。共有ブラシを入れてStyle.Resourcesその色をアニメートします(ただし、スレッド/フリーズ関連の例外が発生します)。