我在我的应用程序中使用 Windows 工作流基础重新托管库,我试图覆盖默认颜色,但它正在修改,我在我的应用程序中尝试了下面的代码,但它不起作用。
自定义颜色.xaml
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary x:Uid="ResourceDictionary_1" Source="pack://application:,,,/System.Activities.Presentation;component/System/Activities/Presentation/ColorResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
<SolidColorBrush x:Key="WorkflowViewElementCaption" x:Uid="SolidColorBrush_8" Color="#FFE6E6E6" />
<SolidColorBrush x:Key="DesignerViewBackground" x:Uid="SolidColorBrush_9" Color="#FF232325" />
<SolidColorBrush x:Key="LinearGradientBrush" x:Uid="SolidColorBrush_10" Color="#FF232325" />
<SolidColorBrush x:Key="ShellBarBackgroundBrush" x:Uid="SolidColorBrush_11" Color="#FF232325" />
</ResourceDictionary>
和我的App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="CustomColors.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
我的 C# 代码
WorkflowDesigner wfDesigner = new WorkflowDesigner();
wfDesigner.Load(new ActivityBuilder() { });
designerview.Child = wfDesigner.View;
找到了默认颜色源代码
有什么方法可以覆盖默认颜色。
如果你查看主题字典,你会发现资源使用的是StaticResource。 https://github.com/microsoft/referencesource/blob/51cf7850defa8a17d815b4700b67116e3fa283c2/System.Activities.Presentation/System.Activities.Presentation/Themes/Generic.xaml#L28 以这种方式在主题中设置的值不能在运行时被覆盖(或者更确切地说,它们可以,但需要一些半黑客用手鼓跳舞)。
为了能够覆盖,主题中的资源键必须使用 ComponentResourceKey 设置并使用 DymamicResource 应用。请参阅示例https://stackoverflow.com/a/78858333/13349759