2016-08-11 134 views
0

我正在开发一个UWP应用程序,该应用程序将被加载并从WebAPI获取其大部分配置。 我希望能够在XAML和代码中使用已翻译的标签,因为我看到“UWP方式”是使用资源文件,但我不想将该字符串存储在项目本身中,我希望它们加载从WebAPI,然后使用缓存的键值distionary。uwp:不使用资源文件的自定义本地化

很显然没有问题得到代码中的字符串,问题是与XAML - 在WPF中它是非常简单的自定义MarkupExtension,但因为我们没有在UWP MakrupExtensions,是否有一个干净的方式来做到这一点?

编辑:

我试过到目前为止:

  • 创建所有控件的基类与具有索引得到一个翻译的对象 - 不工作,因为X:绑定不支持基于字符串索引
  • 试图使用自定义动态对象 - 不工作,因为X:绑定不支持动态物体
  • 试图屁股一些自己的类从它的资源和访问属性 - 再次不工作

现在唯一的办法似乎是创建一个巨大的类,其中每个翻译/标签必须拥有自己的属性,或者使用标准的绑定(或从其派生的某个类)。

EDIT_2:

忘记,是另一种使用情况将在XAML资源使用模板,不仅控制和页面中使用它。

回答

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'消息的错误。但它编译和工作,所以现在必须足够好。