2016-08-11 115 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'消息的錯誤。但它編譯和工作,所以現在必須足夠好。