首页 > 解决方案 > 如何在运行时合并两个资源文件?

问题描述

这是否可以维护多个资源文件或以这样的方式合并它们,以便我们有一个默认文件,其中包含每条记录的默认值,而其他资源文件应根据其要求覆盖记录。

我们的代码应该检查特定记录是否被覆盖,如果它被覆盖,那么它将采用被覆盖的值,否则它将从默认资源文件中获取。

例如:- 我的默认资源文件有记录

           <data name="Common_Color" xml:space="preserve">
                <value>#1892E7</value>
           </data>
           <data name="LoginView_Icon_Color" xml:space="preserve">
                <value>#1892E7</value>
           </data>
           <data name="Here_Text_Color" xml:space="preserve">
                <value>#FFFF1BF5</value>
           </data>

其他文件 Resources1.resw 有类似的记录

           <data name="Common_Color" xml:space="preserve">
                <value>#FFFFF</value>
           </data>

其他文件 Resources2.resw 有类似的记录

           <data name="LoginView_Icon_Color" xml:space="preserve">
                <value>#1892E7</value>
           </data>

这样,如果我们需要 Common_Color 值,我们可以合并默认文件和 Resourse1 文件并将 Common_Color 值从 #1892E7 更改为 #FFFFF 并拥有一个这样的文件并在我们的代码中使用这个文件

           <data name="Common_Color" xml:space="preserve">
                 <value>#FFFFF</value>
           </data>
           <data name="LoginView_Icon_Color" xml:space="preserve">
                 <value>#1892E7</value>
           </data>
           <data name="Here_Text_Color" xml:space="preserve">
                 <value>#FFFF1BF5</value>
           </data>

标签: c#windowsxamluwpresources

解决方案


如何在运行时合并两个资源文件?

UWP 不提供直接合并resw 文件的api,而resw 常用于UWP 平台内UI 中的字符串本地化。我们可以resw使用 Visual Studio 编辑文件并使用以下内容加载内容,但我们无法在运行时编辑它们的内容。

var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView();
this.myXAMLTextBlockElement.Text = resourceLoader.GetString("Farewell");

根据您的要求,我们建议您使用json文件替换,您可以将 json 文件反序列化为对象,比较不同并合并,然后将新对象序列化为 json 文件。


推荐阅读