我处在我的程序中定义了3种颜色的情况。它们在App.xaml
中定义为:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Name="Aero">
<Color x:Key="AccentColor">#3399ff</Color>
<Color x:Key="AccentDarkColor">#236bb2</Color>
<Color x:Key="AccentDarkerColor">#1e5b99</Color>
<SolidColorBrush x:Key="AccentBrush" Color="{DynamicResource AccentColor}" />
<SolidColorBrush x:Key="AccentDarkBrush" Color="{DynamicResource AccentDarkColor}" />
<SolidColorBrush x:Key="AccentDarkerBrush" Color="{DynamicResource AccentDarkerColor}" />
</ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
现在,我希望这些颜色可以更改,因此我的程序中有一些区域可以通过编程方式更改它们:
Application.Current.Resources["AccentColor"] = color;
Application.Current.Resources["AccentDarkColor"] = color;
Application.Current.Resources["AccentDarkerColor"] = color;
这会带来一个问题,因为我的应用程序中还定义了故事板,允许应用程序从一种颜色淡化(通过ColorAnimation
)到另一种颜色(例如从AccentColor
淡出到{ {1}})。
当这些故事板执行此操作时,他们使用AccentDarkColor
,因为无法使用StaticResource
(因为DynamicResource
必须是freezable),WPF才能执行此操作。< / p>
我尝试将故事板移至Storyboard
,然后(在我的App.xaml
中引用故事板的BeginStoryboard
:
DynamicResource
但是,当我以编程方式更改故事板时,<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{DynamicResource BackgroundToAccentBorderToAccentDarkTransitionStoryboard}" />
</DataTrigger.EnterActions>
</DataTrigger>
</Style.Triggers>
重新执行时它们不会更改,尽管它是DataTrigger
。
我该怎么办?