欲しいもの
複数のUserControl
タイプでいくつかのスタイルを再利用したいと思います。
一部のコントロールの背景Border
を点滅させたいのですが、すべてが同期して点滅するように、すべてのコントロールで同じスタイル、静的リソース、およびアニメーションを使用するようにします。
私がそれをやろうとしている方法
そのために、次のように、リソースディクショナリでいくつかの一般的な色を定義しました。
<SolidColorBrush x:Key="StatusErrorBackground" Color="#440000" />
...そして私はこの辞書でStoryBoardも次のように定義しました:
<Storyboard x:Key="BackgroundAnimation">
<ColorAnimation
Storyboard.Target="{StaticResource StatusErrorBackground}"
Storyboard.TargetProperty="Color"
From="#440000"
To="#ff0000"
Duration="0:0:1"
RepeatBehavior="Forever"
AutoReverse="True"/>
</Storyboard>
次に、トップレベルに以下を追加しましたUserControl
。
<FrameworkElement.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CommonResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</FrameworkElement.Resources>
<FrameworkElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource BackgroundAnimation}"/>
</EventTrigger>
</FrameworkElement.Triggers>
...そして、UserControl
その子である他のさまざまなで、上記のように再インポートし、ResourceDictionary
をに使用し{StaticResource StatusErrorBackground}
ますBackground
。
SolidColorBrush
問題の要素は(宣言のように)赤で表示されますが、点滅していません。
これまでのあいまいな理解
たぶん、これを行っても、問題の要素に対して適切なPropertyChanged通知が発生しないため、再描画されませんか?またはそのようなもの。のColor
プロパティSolidColorBrush
は依存関係プロパティではありませんが、をSolidColorBrush
実装IAnimatable
しているため、ここでは明らかに魔法が起こっています。私にはわかりません。
それとも、同じリソースディクショナリを2つの異なる場所(トップレベルUserControl
に1回、子に1回)にインポートしているため、2つの独立したStaticResource
参照になってしまうのでしょうか。ResourceDictionary
同じファイルを2つの異なるコントロールにインポートすると、それぞれに独立したリソースが作成されますか?その場合、アプリレベルでプルすることでこれを修正できるかもしれません...
誰かが私が間違っていることとそれを修正する方法を教えてもらえますか?