首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResourceDictionary定位器

ResourceDictionary定位器
EN

Stack Overflow用户
提问于 2012-09-15 02:04:28
回答 3查看 248关注 0票数 1

有没有办法创建一个ResourceDictionary定位器。现在我在xaml中有:

代码语言:javascript
复制
 <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../../Resources/StringResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

其中,后台代码根据当前文化设置字典列表。

我想要一份

代码语言:javascript
复制
 <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <Locator "StringResources"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

或者类似的东西,这样我就不必修改每个v.xaml.cs文件

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-09-15 02:33:27

您可以创建自己的ResourceDictionary:

代码语言:javascript
复制
public class ResourceDictionaryLocator : ResourceDictionary
{
    public ResourceDictionaryLocator()
    {
        switch (CurrentLocalization)
        {
            case "English":
                base.Source = new Uri("pack://application:,,,/Languages/English.xaml");
                break;

            case "French":
                base.Source = new Uri("pack://application:,,,/Languages/French.xaml");
                break;
        }
    }
}

然后像这样使用它:

代码语言:javascript
复制
<Application x:Class="TestingWPF.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:TestingWPF"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <local:ResourceDictionaryLocator />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

然而,这通常不是这样做的。您可以在运行时加载不同的资源字典。类似于以下内容:

代码语言:javascript
复制
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(dictionary);
票数 2
EN

Stack Overflow用户

发布于 2012-09-15 02:37:54

您可以创建一个返回请求的ResourceDictionary的MarkupExtension

代码语言:javascript
复制
public class ResourceDictionaryLocator : MarkupExtension
{
    public string DictionaryName { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        // Logic to return the wanted ResourceDictionary
        if (DictionaryName == "...")
        {
        }

        return null;
    }
}

然后在xaml中使用它:

代码语言:javascript
复制
<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <local:ResourceDictionaryLocator DictionaryName="StringResources" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
票数 2
EN

Stack Overflow用户

发布于 2012-09-15 02:25:35

我真的不知道这是否可能,但是你想让你的应用程序是“可本地化的”吗?这篇文章可能会对你有所帮助:http://www.codeproject.com/KB/WPF/WPF_Resx_Localization/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12429725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档