2016-08-11 8 views
0

サイドロードされ、WebAPIからほとんどの設定を取得するUWPアプリを開発しています。 "UWPの方法"はリソースファイルを使用するのがわかりますが、XAMLとCodeの両方で翻訳されたラベルを使用できるようにしたいのですが、プロジェクト自体に文字列を格納したくないので、 WebAPIから取得し、キャッシュされたKey-Value Distionaryを使用します。uwp:リソースファイルを使用しないカスタムローカライゼーション

明らかにコード内の文字列を取得するのに問題はありません。問題はXAMLです - WPFでは、カスタムMarkupExtensionでかなりシンプルでしたが、UWPでMakrupExtensionsがないので、そうするクリーンな方法はありますか?

EDIT:

私がこれまで試したどのような:

  • は翻訳を取得するインデクサーを持つオブジェクトを持つすべてのコントロールの基本クラスを作成します - 動作していないXので:バインドをサポートしていません。文字列ベースのインデクサー
  • カスタム動的オブジェクトを使用しようとしている - のxために動作していない:バインドは、それから、リソースとアクセスプロパティとして、いくつかの独自のクラスをお尻しようとしている動的オブジェクト
  • をサポートしていません - 再び
  • を動作していません

今のところ唯一の方法は、各翻訳/ラベルが独自のプロパティを持つか、標準のBinding(またはそれから派生したいくつかのクラス)を使用する必要がある巨大なクラスを作成するようです。

EDIT_2:

は、別のユースケースは、テンプレート、コントロールとページだけではないとXAMLリソースでそれを使用することであろうことを、忘れてしまいました。

答えて

0

私がここで説明したようCustomResource機能を使用して、解決策を見つけたように見えるOK:

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; 
    } 
} 

をそしてそれを初期化しますコンストラクタ:

public App() 
{ 
    CustomXamlResourceLoader.Current = new MyResourceLoader(); 
    this.InitializeComponent(); 
    this.Suspending += OnSuspending; 
} 

それから、私は次のようにXAMLからアクセスできます:

<TextBlock Text="{CustomResource myTranslationKey}"></TextBlock> 

そして、それは動作します。

しかし... VisualStudioをで XAMLデザイナはCustomResourceマークアップ拡張機能を理解し、Cannot resolve symbol 'CustomResource'メッセージとエラーとしてそれを強調していません。しかし、それはコンパイルして動作するので、今のところ十分なものでなければなりません。

関連する問題