我正在开发一个UWP应用程序,它将被侧载并从WebAPI获得大部分配置。 我希望能够在XAML和Code中使用已翻译的标签,因为我看到了" UWP方式"是使用资源文件,但我不想将字符串存储在项目本身,我希望它们从WebAPI加载,然后使用缓存的键值自定义。
显然在代码中获取字符串没问题,问题在于XAML - 在WPF中使用自定义MarkupExtension非常简单,但是因为我们在UWP中没有MakrupExtensions,是否有一种干净的方法可以做到这一点?
编辑:
到目前为止我尝试了什么:
目前唯一的方法似乎是创建一个庞大的类,其中每个翻译/标签必须拥有它自己的属性,或者使用标准的Binding(或从它派生的某个类)。
EDIT_2:
忘了,另一个用例是在xaml资源中使用模板,而不仅仅是控件和页面。
答案 0 :(得分:0)
好的,看起来我找到了一个解决方案,使用了CustomResource
功能,如下所述:
https://msdn.microsoft.com/en-us/windows/uwp/xaml-platform/customresource-markup-extension
如果我实现这样的类:
public class MyResourceLoader : CustomXamlResourceLoader
{
protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType)
{
return "Translation for key:" + resourceId;
}
}
并在App.xaml.cs
构造函数中初始化它:
public App()
{
CustomXamlResourceLoader.Current = new MyResourceLoader();
this.InitializeComponent();
this.Suspending += OnSuspending;
}
然后我可以通过以下方式从XAML访问它:
<TextBlock Text="{CustomResource myTranslationKey}"></TextBlock>
它有效。
然而...... VisualStudio中的XAML设计器并不了解CustomResource
标记扩展,并将其作为Cannot resolve symbol 'CustomResource'
消息的错误加下划线。但它编译和工作,所以现在必须足够好。