资源本地化:使用x:Uid引用另一个程序集的资源

时间:2013-02-18 04:41:57

标签: xaml windows-8 localization visual-studio-2012 winrt-xaml

我正在编写一个win8应用程序,并将在我的XAML代码中使用内置资源管理系统:resw文件和x:Uid标记。

所以我创建了这样的TextBox

<TextBlock Style="{StaticResource HeaderTextStyle}" x:Uid="ResourceTest"/>

我在程序集中使用ResourceTest.Text条目创建相应的资源文件,它运行正常:在运行时显示正确的文本。

现在,我想将所有resx文件移动到另一个C#库以保持可维护性。所以我将资源文件放在一个全新的项目中,并从主程序集中引用这个新程序集。

但这会导致前一个构造失败(不显示任何文本)。

但是,如果我使用以下代码从侧面程序集(称为ResourcesLibrary)中以编程方式检索资源值,我会正确获取字符串:

static ResourceLoader resourceLoader = null;
public static string GetString(string resourceName)
{
    if (resourceLoader == null)
        resourceLoader = new ResourceLoader ("ResourcesLibrary/Resources");
    return resourceLoader.GetString (resourceName);
}

如何在处理程序集外资源时启用x:Uid机制?

我在x:Uid尝试了一些事情,例如ResourcesLibrary/Resources/ResourceTest,但没有运气。

2 个答案:

答案 0 :(得分:13)

我长期遇到同样的问题。但经过一段时间的测试后,我通过在XAML代码中编写整个资源路径来解决它。

这样的事情:

<TextBlock x:Uid="/ResourcesLibrary/Resources/ResourceTest" />

不幸的是,这个答案来得很晚,但它可以帮助其他人。

答案 1 :(得分:0)

根据我的理解,如果资源保存在.resx文件中,则无法使用x:Uid。

如果您使用.resw文件,则可以访问字符串,无论它们驻留在哪个程序集中。

可以像你在问题中提到的那样访问它们&#34; ResourcesLibrary / Resources / ResourceTest&#34;