如何覆盖dll库中的默认颜色

问题描述 投票:0回答:1

我在我的应用程序中使用 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;

我在在此处输入链接描述

找到了默认颜色源代码

有什么方法可以覆盖默认颜色。

c# wpf workflow-foundation app.xaml
1个回答
0
投票

如果你查看主题字典,你会发现资源使用的是StaticResource。 https://github.com/microsoft/referencesource/blob/51cf7850defa8a17d815b4700b67116e3fa283c2/System.Activities.Presentation/System.Activities.Presentation/Themes/Generic.xaml#L28 StaticResource 以这种方式在主题中设置的值不能在运行时被覆盖(或者更确切地说,它们可以,但需要一些半黑客用手鼓跳舞)。

为了能够覆盖,主题中的资源键必须使用 ComponentResourceKey 设置并使用 DymamicResource 应用。请参阅示例https://stackoverflow.com/a/78858333/13349759

© www.soinside.com 2019 - 2024. All rights reserved.