我正在将应用程序从 Windows Phone 8.1 移植到 UWP,但从资源获取字符串时遇到问题。在 WP 8.1 中我可以通过写来获取字符串:
Text="{Binding Path=LocalizedResources.lDownloadStatus , Source={StaticResource LocalizedStrings}}"
UWP 中是否有类似的解决方案,或者我必须设置 x:UID,然后在资源文件中设置例如:“Button.Content | SampleContent”?
您应该在项目中创建文件夹“Strings”,对于法语,在其中创建另一个具有国家/地区 LCID 名称的文件夹(fr-fr 表示法国)。并在那里创建resource.resw文件。
如果您想在 TextBlock.Text 中使用值,请将 .resw 文件中的字段命名为“Hello.Text”并为其指定值“Bonjour”。
转到您的 TextBlock 并设置 x:Uid="Hello"。
使用 ApplicationLanguages.PrimaryLanguageOverride = "fr-fr" 更改您的语言。
使用 x:uid 加载资源字符串,或者您可以使用 ResourceManager 从后端获取资源字符串。 以下是来自 MSDN 的示例:如何创建本地化 UWP 应用程序。
希望有帮助!
我在 CustomResources 方面获得了非常好的体验。
只需在 UI 项目中的任何位置创建一个继承自 CustomXamlResourceLoader 的新类并实现以下方法:
protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
{
var parts = resourceId.Split('|');
if (parts.Length != 2)
throw new ArgumentException();
return ResourceLoader.GetForViewIndependentUse(parts[0]).GetString(split[1]);
}
然后创建资源文件,我曾经将它们命名为我所在的页面,即“MainPage.resw”。
就是这样,现在您可以开始使用 XAML 中的资源了:
Text="{CustomResource MainPage|MyResourceKey}"
当然,分隔符可以是任何你想要的东西,不限于Pipe。只需确保在 ResourceLoader 和 XAML 中使用相同的分隔符即可。
您无法在设计器中进行预览,但最大的优点是您可以拆分资源文件,而不必将所有内容都放在一个文件中。
请参阅 https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/customresource-markup-extension 了解更多信息。
您应该使用 x:Uid
例如,您想将“Save”设置为按钮的内容。 因此,您可以将
x:Uid = "SaveButton"
添加到按钮,然后在名为 "SaveButton.Content" 的资源文件中创建一个条目,并将其值设置为 "Save"。