2011-09-13 8 views
7

、私は、実行時に言語を切り替えることができます。シルバーValidatesOnExceptionデフォルトのメッセージのローカライズ

public void SetLanguage(string language) 
{ 
    var culture = new CultureInfo(language); 
    Thread.CurrentThread.CurrentUICulture = culture; 
    Thread.CurrentThread.CurrentCulture = culture; 
    // ... 
} 

を入力するために、私はちょうど変換の問題の場合には「ValidatesOnException = true」を追加し、それはありませんジョブ。しかし、デフォルトの例外メッセージは私のOSの文化にあり、手動で選択されたものではありません。

このスレッドでは、exception message localizationのアイデアは、私がしたCurrentCultureとCurrentUICultureを変更することです。だから私はこだわっている。

私は何ができますか?

感謝:)

編集:私は、ユーザーの入力を検証するために、convertback方法でカスタム例外でカスタムコンバータを使用しようとしました。問題は、コンバートバックメソッド内の例外がvalidatesOnExceptionによってキャッチされず、アプリケーションが壊れてしまうことです。

編集2:明確にする - >小数点のプロパティがテキストボックスにバインドされていて、このテキストボックスに "blabla"と入力すると、問題があることがわかります。実行時ロケールであり、OSロケールではありません。 プロパティーセッターで例外が発生することはありません。なぜなら、そこには決して行きません。デフォルトのコンバーターはそれ以前に例外を発生させます。

私はそれがはっきりしていることを望みます。私があなたを助けてくれるならば、躊躇しないでください:)

答えて

0

おそらく、あなたは最初に文化を変えていないでしょう。

私はあなたがこのリンクで最初の答えで与えられたアプローチを試みることを示唆している:

Change culture of Silverlight application

+0

コンストラクタで言語を設定したくないので、実行時に変更することができます。これは当てはまりません。この言語はプライベートセットです。 –

+0

コンストラクタ内にあるからといって、それが実行時にできないわけではありません。パラメーター化されたコンストラクターを使用し、使用したSetLanguageメソッドに似たロジックを含める –

0

1つの可能なアプローチは、あなたが保存しているにもかかわらず、stringにプロパティの種類を変更することですそれの背後にはdecimalという値があります。 getterは、decimal値のToStringを呼び出し、stringからdecimalへの変換をDecimal.Parseなどを使用して行います。このアプローチは、あなた自身でタイプ変換を行う必要があることを意味しますが、それは少なくともあなたにもう少しコントロールを与えます。

設定者は、検証エラーを示すために例外をスローすることができます。あるいは、インターフェイスIDataErrorInfoINotifyDataErrorInfoのいずれかを使用して、検証エラーを表示することもできます。 This pageにはIDataErrorInfoの例があり、this oneにはINotifyDataErrorInfoを使用した例があります。

0

ValidationRuleのカスタム実装を使用して、Binding.ValidationRulesコレクションに追加することができます。コレクションをクリアする前に(XAMLの実行方法がわからない)、このルールを追加する必要があります(MSDNページのいずれかで説明されています)。

このクラスにはValidateメソッドがあり、検証を実行して、必要なエラーメッセージを返すことができます。

+0

はシルバーライトには存在しません.wpf:/ –

+0

ああ、申し訳ありませんが、私は+100評判を得ています。あなたは使っていますか? SL4では、IDataErrorInfoインターフェイスを実装できます。 –

関連する問題