что бы я хотел
Я хочу повторно использовать некоторые стили для нескольких типов 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
, так что за кулисами здесь, очевидно, происходит какая-то магия, которую я не понимаю.
Или из-за того, что я импортирую один и тот же словарь ресурсов в два разных места (один раз в моем верхнем уровне UserControl
и один раз в моем дочернем элементе), я получаю две независимые ссылки StaticResource
? Если вы импортируете один и тот же файл ResourceDictionary
в два разных элемента управления, создаются ли для каждого из них независимые ресурсы? В этом случае я мог бы исправить это, потянув его на уровне приложения, я думаю...
Может ли кто-нибудь сказать мне, что я делаю неправильно и как я могу это исправить?