C# 使用XAML中的ReswFileCodeGenerator绑定.resw文件中的字符串

C# 使用XAML中的ReswFileCodeGenerator绑定.resw文件中的字符串,c#,xaml,localization,windows-runtime,windows-phone-8.1,C#,Xaml,Localization,Windows Runtime,Windows Phone 8.1,我尝试使用多语言应用工具包本地化我的Windows Universal应用。 因为不能直接从XAML中的.resw文件绑定字符串,所以我使用了ReswFileCodeGenerator工具。它在代码隐藏中工作得很好,但在XAML中我无法正确地实现这一点 在Windows Phone 8.0中,我可以使用: Text="{Binding Path=LocalizedResources.StringName, Source={StaticResource Strings}}" Windows(Ph

我尝试使用多语言应用工具包本地化我的Windows Universal应用。 因为不能直接从XAML中的.resw文件绑定字符串,所以我使用了ReswFileCodeGenerator工具。它在代码隐藏中工作得很好,但在XAML中我无法正确地实现这一点

在Windows Phone 8.0中,我可以使用:

Text="{Binding Path=LocalizedResources.StringName, Source={StaticResource Strings}}"

Windows(Phone)8.1中是否有类似的方式使用ReswFileGenerator工具?

在wp8.1中使用.resw文件进行资源转换时,需要在xaml控件上使用x:Uid属性


我仍然建议您按照depchie已经建议的那样做:使用
x:Uid
属性

如果需要从代码中获取本地化字符串,只需将资源名称中的
替换为
/
。因此,在XAML中,您将编写:

<TextBlock x:Uid="appString" />

我已经编写了一些代码来帮助我解决这个问题。它可能并不完美,但对我来说很有用。这是一个例子。您可以构建它并将.exe文件放在一些易于访问的文件夹中

在包含资源的项目中,您可以将预生成操作设置为如下内容(您只需更改“path\to\ResourcesHelper.exe”部分):

此外,主资源必须位于项目的resources/en-US文件夹中(不过,您可以在代码中对其进行更改)

这样,当您构建项目时,它将生成一个名为LocalizedStrings.cs的文件,该文件类似于为.resx文件生成的文件。它包含一些称为LC(小写)、UC(大写)和UCF(大写优先)的附加属性,这些属性返回该套管中的管柱。我希望你会觉得它有用


注意:这个工具不是为其他人设计的,所以我只编写了我需要的代码,所以它可能不会完美地工作。

我以前用x:Uid做过,但不方便,因为对于XAML,我总是需要在.resw文件中写入“appString.Text”。不能在代码隐藏中使用(我只需要“appString”)。@Cristian126appString.Text也可以在代码隐藏中使用。看看我的答案,微软方法的问题是强制资源文件适应xaml的使用。大多数语言资源在WP、iOS和Android项目之间共享。当前对开发人员强制使用新的密钥命名约定(如“FieldKey.Text”)的方法对于这种重用目的没有帮助。感谢您的回答,我已经将预构建操作和.resw文件添加到了Resources/en-US文件夹中。但是我现在在哪里可以找到LocalizedStrings.cs文件?我是否应该修改.resw文件中的自定义生成工具?@Cristian126使用预生成操作生成项目后,将在项目的主文件夹(位于资源文件夹上方)中创建该文件。不过,您必须手动将其包含到项目中。使用“显示所有文件”按钮,然后包括文件。它在文件夹中,而不是项目本身。
var resourceLoader = new ResourceLoader();
var localizedText = resourceLoader.GetString("appString/Text");
call "path\to\ResourcesHelper.exe" "$(TargetName)" "$(ProjectDir)\" "$(RootNameSpace)" "universal"