我正在尝试在大型 WPF 应用程序中设置主题框架。目前我们找到的解决方案是为每个调色板创建单独的 .xaml 文件,如下所示:
<LightColors.xaml>
<Color x:Key="MainPanelColor">Aqua</Color>
<Color x:Key="MainItemColor">Orange</Color>
<SolidColorBrush x:Key="MainPanelBrush" Color="{StaticResource MainPanelColor}" />
<SolidColorBrush x:Key="MainItemBrush" Color="{StaticResource MainItemColor}" />
Run Code Online (Sandbox Code Playgroud)
然后 UI 会像这样引用这些项目:
<Textblock Foreground="{DynamicResource MainItemBrush}"/>
Run Code Online (Sandbox Code Playgroud)
在 C# 中,调色板在运行时会更改。该主题框架完成了允许在运行时更改主题的任务。
问题:我想在 UI 和颜色之间创建一个层,以便调色板颜色可以链接到整个 UI 中使用的大量颜色定义。我发现接近有效的唯一解决方案是添加如下文件:
<ColorDefinitions.xaml>
<DynamicResource x:Key="Textblock_SetupPage_Foreground" ResourceKey="MainItemBrush" />
<DynamicResource x:Key="SecondDefinition" ResourceKey="MainItemBrush" />
Run Code Online (Sandbox Code Playgroud)
并在 UI 中引用这个新资源,如下所示:
<Textblock Foreground="{StaticResource Textblock_SetupPage_Foreground}" />
Run Code Online (Sandbox Code Playgroud)
不过,这个解决方案并不能完全发挥作用。它只允许单个 UI 元素使用 DynamicResources 之一,例如“Textblock_SetupPage_Foreground”,并且将 Textblock 引用更改为 DynamicResource 会产生错误。我怎样才能完成这个任务?