2012-02-29 4 views
0

私はListBoxコントロールと同様に識別できるコントロールを持っています。各項目は1つの要素(TextBlockの例)で表されます。私が望むのは、このアイテムのレイアウトを変更して、2つのTextBlockを含むようにすることです。だから、私はControlTemplateを作成し、境界線グリッド、TwoTextBlocksを入れ、すべてがうまくいきます。今問題:プロパティにバインド拡張を実装します。

私は項目にテキストをローカライズできるようにする必要があり、私は通常、次のようにこれをしなかった:

<... Text="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}" /> 

は今、私は両方のテキストブロックと同じことを行うことができるようにする必要があります。だから私はこのアイテムがバインドされるカスタムタイプを作成し、2つのプロパティを公開する必要があると思った:タイトルと説明。このプロパティを文字列型として公開すると、すべて正常に動作しますが、前に使用したマークアップバインディングが失われています。どのように2つのプロパティで同じを達成するには?結果は以下のようにする必要があります:

<... Title="{Binding Strings.SomeString, Source={StaticResource ApplicationResources}}", Description="{Binding Strings.AnotherString, Source={StaticResource ApplicationResources}}" /> 

私はResourcemManagerクラスでローカライズ作業を行うことができたが、それは実行時に動的に適用されるローカリゼーションを提供するためにも、複雑になります。

上記のコードを使用するには、どうすればよいですか?それから、ApplicationResourceにINotifyPropertyChangedを実装するだけで、すべてが設定されます。

答えて

0

素晴らしい!

私はあなたがここでやったのと同じことをやろうとしています。ええ、私は解決策がありますが、それが今まで働いているかどうかはわかりません。

まず、辞書を保持するLocalizationManagerが必要です。あなたは、ユーザー・アカウント・ウィンドウをローカライズするだけで、この

<TextBlock Text="something, UsernameKey"> 

を行うと、localizationManagerは、「ユーザー名」、または他の言語

第二に、XAML拡張にUsernameKeyをマップするために必要がある場合は、例えば

、 LocalizationManagerからキーの値を探します。

このカスタムエクステンションがBinding拡張から派生できるかどうかは疑問ですが、もしそうなら、これは非常に簡単です。ターゲットにバインディングオブジェクトを作成するだけです。そうでなければ、xaml拡張によるUIElementへのWEAK参照を保持していて、動的にテキストを更新するのは適切だと思います。

このソリューションはシンプルですが一般的ではありません。右から左に読む言語があります。アプリケーションは、右から左へコンテンツを表示するように要求します。

私は別の汎用ソリューションを持っていますが、より複雑です。

xaml拡張の代わりに、添付依存プロパティを使用します。

はこのようにそれを実行します。

<TextBlock LocalizationManager.LocalizationKey="UsernameKey" /> 

だから、今の問題はLocalizationManagerで「テキスト」プロパティを設定する方法ですか?

私たちは、アダプタを使用

は、LocalizationManagerはタイプ「のTextBlock」だから

、アプリケーションが起動されるため、適切なアダプタを検索します、我々はLocalizationManagerにいくつかのアダプタを登録します。

LocalizationManager.Current.RegisterAdapter<TextBlock>(new TextBlockAdapter()) 

このソリューションは、より汎用的です、アダプタを提供する場合、あらゆる種類のコントロールをサポートしますが、わかるように、このソリューションは以前のものよりも多くの作業とはるかに複雑な作業を必要とします。私が最初に質問をし、なぜこれが、私はこれらの設計ソリューションはあなた〜

+0

こんにちはdBearを助けることを願っ

は、私が言ってきたように、私はそれを動作させることができたが、私はアプローチが好きではありません場所。私のアプローチは若干異なり、LocalizationResourceという名前の別のプロパティを導入したので、Textにはキーまたはプレーンテキストのみが含まれていました。しかし、それは標準を破るので、まだ、私が好む解決策ではありません。 – Goran

関連する問題