Home > C# > 目的別資料 > 地域設定

厳格に型指定されたResxリソースと結合する

WPFのための地域設定の手引き Localization Guidance for WPF

原文

WPF Localization Guidance 「Rick StrahlとMichele Leroux Bustamante(2009年6月)」の和訳です。
地域設定の実装の参考にしてください。

関連ファイル

厳格に型指定されたResxリソースと結合する

Binding to Strongly-Typed Resx Resources

厳格に型指定されたリソースは、Visual Studio環境の統合された機能です。前に述べたように、厳格に型指定されたリソースは、自動的に作成されます。 プロジェクトに、新しいResxファイルが追加されると、自動的に、リソース・ファイルのような同じ名前のクラスが作成されます。 コード内では、あなたは、単純に、生成されたリソースクラスに生成した静的プロパティのように、厳格に型指定されたリソースに、アクセスすることができます。 例えば、


MessageBox.Show(WpfLocalization.Properties.Resources.HelloWorld);				
				

これは、役に立ちますが、WPFアプリケーションでは、あなたは、おそらく、コードを使用してそれを割り当てる代わりに、宣言的に、XAML要素に値を結合したいと思います。 上で示されたものと、同じリソースに基づいて、あなたは、StaticExtensionマークアップ拡張機能を使用して、簡単に、静的リソースオブジェクトを結合することができます。 StaticExtensionによる結合は、2つの手順が含まれています。

XAMLドキュメントの、あなたのリソースの名前空間/アセンブリを登録します。


xmlns:props="clr-namespace:WpfLocalization.Properties"				
				

リソースをStaticExtensionを使用しているプロパティに結合します。


<Label x:Name="lblResxHelloWorldStrongValue" 
	content="{x:Static props:Resources.HelloWorld}" /> 				
				

この予想される展開では、あなたは、WpfLocaliztion.Properties.Resourcesのような、厳格に型指定されたオブジェクトの静的プロパティに結合します。 それは、Resxリソース・ファイル内のリソース・キーと一致します。 Figure 17では、現在のUICultureは、既定の設定カルチャと一致します。(この例では、en-US) そして、それで、リソースは、既定のリソースの設定から取り出されます。 現在のUICultureが、スイスで利用されるドイツ語(de-CH)の場合、Helloキーは、スイスのリソースで塗り潰されます。 Saveキーが、リソース代替システムによって、指定されていないGermanリソースで塗り潰されている間。 Germanリソースが存在しない場合、リソース代替システムは既定のリソースに戻します。そして、そこから、Saveキーを読み込みます。

FIGURE 17:

厳格に型指定されたResxプロパティは、XAMLのx:Static結合を使用して結合します。

FIGURE 17

厳格に型指定されたリソース・オブジェクトとその静的プロパティにx:Staticが結合している点、- この例では、WpfLocalization.Properties.Resource。 これは、コンパイラが、XAMLのコンパイルの間に、マークアップ拡張機能で、すべての無効な型参照を捕えるので、さらに安全な型です。:


<Label x:Name="lblResxHelloWorldStrongValue" 
	content="{x:Static props:Resources.HelloWorld}" />
				

それは、また、文字列以外の値に結合する可能性があります。 それにもかかわらず、Resxファイルに、文字列以外のリソースを、実際に入力するために、すこし混乱します。 どんな、デザイナー・サポートもありません。 しかし、文字列といくつかの知られている画像形式は、ビットマップ、アイコンと一般的なストリームを好みます。 文字列以外のリソース値を作成するために、あなたは、行う必要があります。 Resxファイル内で手動ではなく、Visual Studioのリソース・エディタを通して、ファイルされます。 例えば、幅のための値を追加するために、あなたは、XMLのように、Double型の値をResxファイルに格納することができます。:


<data name="lblHelloWorld.Width" type="System.Double"> 
	<value>20</value>
</data>
				

これは、厳格に型指定されたリソースクラスで、倍精度実数型のプロパティを生成します。:


public static double lblHelloWorld_Width { 
	get {
		object obj = ResourceManager.GetObject("lblHelloWorld.Width", 
						resourceCulture); 
		return ((double)(obj)); 
	} 
}

あなたは、続いて、WPFで以下のリソース・エントリを結合することができます。:


<Label content="{x:Static props:Resources.Today}"
	 Width="{x:Static props:Resources.lblHelloWorld_Width}" 
/>
				

あなたが、結合する値の形式のキーは、あなたが、結合するプロパティの形式と一致する必要があります。 StaticExtensionは、基礎となるプロパティに、直接、結合します。そして、型コンバータには、サポートが全くありません。 先程の例では、Double型の値はResxに格納されます。 そして、厳格に型指定されたプロパティは、ラベル要素のWidthプロパティに結合します。 これは、Doubleのような単純な型のために、十分に簡単だと思われます。 しかし、例えば、MarginとPaddingのための使用されるThicknessオブジェクトのように、より複雑なものは困難です。 XAMLが使用する標準文字列変換は、XMLシリアル化で動作しません。 言い換えると、あなたは、リソースで調整される余白を除く、10のような文字列の値を割り当てることができません。 あなたは、一致していない形式のために、コンパイル時にエラーを手に入れます。

この複雑さのために、x:Staticの文字列以外の値と厳格に型指定されたリソースにアクセスすることは、推奨されません。 しかし、あなたは、次のセクションで説明するカスタム・マークアップ拡張機能で、簡単に問題を回避することができます。

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」