Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在wpf中动态更改资源字典源名称?_Wpf_Resourcedictionary - Fatal编程技术网

如何在wpf中动态更改资源字典源名称?

如何在wpf中动态更改资源字典源名称?,wpf,resourcedictionary,Wpf,Resourcedictionary,现在我想将ResourceDictionary的源名称source=“StringLocalization/Dictionary\u fr-fr.xaml”更改为source=“StringLocalization/Dictionary\u en-US.xaml” 我该怎么办呢。杂志解释道 在代码中,您不设置源属性。相反,您必须获取 创建或加载一个ResourceDictionary对象。一个 加载现有ResourceDictionary以调用XamlReader.load on的方法 具有Re

现在我想将ResourceDictionary的源名称source=“StringLocalization/Dictionary\u fr-fr.xaml”更改为source=“StringLocalization/Dictionary\u en-US.xaml”

我该怎么办呢。

杂志解释道

在代码中,您不设置源属性。相反,您必须获取 创建或加载一个ResourceDictionary对象。一个 加载现有ResourceDictionary以调用XamlReader.load on的方法 具有ResourceDictionary根的现有XAML文件流,然后 正在强制转换XamlReader.Load返回值到ResourceDictionary。“

看起来您只能通过创建或加载一个ResourceDictionary来获取ResourceDictionary

使用ResourceDictionary了解您的目的也很重要。如果要将它们用作“共享资源”,则不能使用“嵌入资源”操作构建词典。确保它们标记为“内容”,并正确链接到路径位置。此外,了解合并词典在选择哪个资源而不是其他资源方面的行为也很重要(摘自:

合并词典中的资源占用资源中的一个位置 位于主资源范围之后的查找范围 它们被合并到一本词典中。虽然资源密钥必须是 在任何单个字典中都是唯一的,一个键可以存在多个 一组合并词典中的时间。在本例中,资源 返回的将来自中按顺序找到的最后一个词典 合并词典集合。如果合并 集合是在XAML中定义的,然后是合并的 集合中的字典是元素的顺序,如下所示 在标记中提供。如果在主字典中定义了键 在一个被合并的字典中,然后是 返回的将来自主词典。这些范围规则 同样适用于静态资源引用和动态资源引用 参考资料

查看您的代码,您似乎只想将另一个ResourceDictionary加载到您的应用程序中。如果这就是您想要的,那么将其添加到MergeAddictionaries集合可能已经足够了

如果要在运行时加载一个,可以使用以下代码(或类似代码)。只需确保不嵌入您的资源:

<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>
这是你需要的东西。让我知道这是否有帮助

    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);
    }