0

次のスタイルは意図したとおりに機能します(無関係な小道具は削除されます)。

<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その色をアニメートします(ただし、スレッド/フリーズ関連の例外が発生します)。

4

1 に答える 1

1

MSDNによると

... スタイルが定義されているフレームワーク要素のみを直接ターゲットにすることができます。

そのため、名前付きのスタイル パーツをターゲットにする方法はありません。

スタイルターゲットから変更したいプロパティまでドットダウンすることをお勧めします。これがあなたがしたことです。それを考えると、これがあなたにできる最善のことだと思います。


Storyboard.TargetPropertyGoogle 検索用語として使用して見つかった結果

于 2012-10-10T14:12:33.187 に答える