3

私はwpfアプリケーションを持っていて、それをローカライズし始めています。私が選択したローカリゼーションの戦略は、カスタムMarkupExtensionクラスを作成することでした。

私の会社には、すべての文字列を使用して暗号化されたマップを作成するソリューションがすでに作成されており、各文字列を参照するにはintキーが必要なため、.resファイルは使用しません。そこで、すべての「int」キーを使用して列挙型を作成するカスタムジェネレーターを作成しました(intを使用した静的クラスの場合もありますが、実際には問題ではありません)。

したがって、XAMLファイルでこれらの列挙型キーのそれぞれを参照したいと思います。

<Label Content="{l:Translator {x:Static l:TranslatedEnums.MainWindow_WelcomeMessage}}" />

作成された列挙型はTranslatedEnumsであり、私のトランスレータクラスはTranslator(dhu)と呼ばれます。

しかし、x:Staticのドキュメントタイプコンバータのドキュメントを読んだ後、次の質問が頭に浮かびました。

「コンパイル済みxaml」(baml)は、実行時またはコンパイル時に(x:Staticを介して)これらの各タイプを実際に評価しますか?

列挙型の値を静的に参照している理由の1つは、正確な列挙型の文字列キーではなく、その値であるため、アプリケーションのハッキングが少し難しくなるためです。

実行時に解決が行われる場合は、以前のコードを次のように絞り込むことができます。

<Label Content="{l:Translator MainWindow_WelcomeMessage}" />

これには、自分で列挙値を検索する必要がありますが、これはワンライナーです。

TranslatedEnums result;
Enum.TryParse(key, out result);

これによりXamlコードは小さくなりますが(これは良いことです)、キーが存在しない場合はコンパイル時に失敗します(これは問題ではありません)。

4

1 に答える 1

2

実際にはxamlのロード時にあります(ここで述べたように)。xaml oneceのみをロードする場合は、実行時にそれを検討できます。

于 2011-04-12T15:28:54.787 に答える