2011-02-06 15 views
0

WPFのローカリゼーションメソッドに関する小さな研究を行っています。私は、マークアップ拡張機能とアイデアを聞いた:WPF、ローカリゼーション:コントロール値の再評価

<Label Content="{local:Translate {-- label ID here --}}" />

私は非常にこのソリューションが好き:それは実装が非常に簡単で、きれいに柔軟であるように思われます。しかし、一つの懸念があります。そのユーザーがランタイムでロケールを変更するとします。ローカライズされたプロパティを新しい言語に合わせて再評価する方法

答えて

0

DependencyObject.InvalidatePropertyに電話する必要があります。 INotifyPropertyChangedを実装しているオブジェクトにバインドしていた場合、基になるデータが変更されて再評価されることに注意してください。

DependencyObject.InvalidatePropertyは、DependencyPropertyLabel.Contentなど)で呼び出すことができます。

Label label = new Label(); 
label.InvalidateProperty(ContentProperty); 

これは、再評価が必要なさまざまなプロパティに対して実行する必要があります。調べる必要があるさまざまな代替案のために、WPF内でのローカリゼーションについては深さがarticle on MSDNです。

+0

もう少し詳しく教えてもらえますか?私がローカライズしたすべてのコントロールでこのメソッドを呼び出しますか? – Spook

+0

@Spook追加コメントを追加... –

+0

ありがとうございます。私はバインディングを持つ小さな概念実証アプリケーションを開発しました(マークアップ拡張は最終的に1つを生成します)。しかし、WPFでボタンのContentプロパティを再評価させることはできません。 XAMLはここにあります。[link](http://pastebin.com/MuSEMR95)、C#ソースはこちら[link](http://pastebin.com/8m0nPgkJ)です。あなたは私に教えてもらえますか、私は何が間違っていますか? – Spook