Cha*_*u A 3 wpf resourcedictionary
<Application x:Class="CustControls.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/ControlLibrary;component/Styles/ControlResource.xaml"/>
<ResourceDictionary Source="StringLocalization/Dictionary_fr-FR.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
现在我想将 ResourceDictionary 的源名称Source="StringLocalization/Dictionary_fr-FR.xaml"更改为 Source="StringLocalization/Dictionary_en-US.xaml"
我该怎么做。
在MSDN的文档说明,
“在代码中,您没有设置 Source 属性。相反,您必须通过创建或加载一个 ResourceDictionary 对象来获取一个 ResourceDictionary 对象。加载现有 ResourceDictionary 以在具有 ResourceDictionary 的现有 XAML 文件流上调用 XamlReader.Load 的一种方法root,然后将 XamlReader.Load 返回值转换为 ResourceDictionary。”
看起来您只能通过创建或加载一个来获取 ResourceDictionary。
了解使用 ResourceDictionaries 的目的也很重要。如果您打算将它们用作“共享资源”,则不能使用“嵌入式资源”操作构建词典。确保它们被标记为“内容”并正确链接到它们的路径位置。此外,了解合并字典在选择哪个资源而不是另一个资源方面的行为也很重要(取自MSDN 文档):
合并字典中的资源在资源查找范围中占据一个位置,该位置紧跟在它们被合并到的主资源字典的范围之后。尽管资源键在任何单独的字典中必须是唯一的,但一个键可以在一组合并的字典中多次存在。在这种情况下,返回的资源将来自 MergedDictionaries 集合中按顺序找到的最后一个字典。如果 MergedDictionaries 集合是在 XAML 中定义的,则集合中合并字典的顺序就是标记中提供的元素的顺序。如果在主字典和合并的字典中定义了一个键,则返回的资源将来自主字典。这些范围规则同样适用于静态资源引用和动态资源引用。
查看您的代码,您似乎只想将另一个 ResourceDictionary 加载到您的应用程序中。如果这就是您想要的,那么可能将它添加到 MergedDictionaries 集合中就足够了。
如果您想在运行时加载一个,您可以使用以下代码(或类似代码)。只要确保你没有嵌入你的资源:
try
{
string path = @".\Themes\Dictionary1.xaml";
var xmlTextReader = new XmlTextReader(path);
var resourceDictionary = (ResourceDictionary)XamlReader.Load(xmlTextReader);
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message);
}
Run Code Online (Sandbox Code Playgroud)
这是代码以备不时之需。如果这有帮助,请告诉我。