1

ValueConverter がバインディングの一部として使用される場合、Convert関数のパラメーターの 1 つがSystem.Globalization.CultureInfoオブジェクトです。

このカルチャ オブジェクトがどこから情報を取得しているか教えてもらえますか?

そのカルチャに基づいて日付をフォーマットするコードがいくつかあります。自分のマシンでホストされている Silverlight コントロールにアクセスすると、日付が正しくフォーマットされます (マシンで短い日付形式として設定されているd/MM/yyyy形式を使用)。(クライアント マシンから) 別のサーバーでホストされている同じコントロールにアクセスすると、日付がMM/dd/yyyy hh:mm:ssとしてフォーマットされます。これは完全に間違っています。偶然にも、サーバーの地域設定がクライアント マシンと同じに設定されています。

これは私の値コンバーターのコードです:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is DateTime)
        {
            if (parameter != null && !string.IsNullOrEmpty(parameter.ToString()))
                return ((DateTime)value).ToString(parameter.ToString());
            else
                return ((DateTime)value).ToString(culture.DateTimeFormat.ShortDatePattern);
        }
        return value;
    }

基本的に、特定の形式をコンバーター パラメーターとして指定できますが、そうでない場合は、カルチャ オブジェクトの短い日付パターンが使用されます。

4

2 に答える 2

1

うーん、それは確かに興味深いです。どちらの場合も、Silverlight はクライアント上で完全に実行されているため、サーバーがそれと関係があるとは思いません。しかし、Fiddler を実行して、HTTP ヘッダーにロケールまたは言語を指定するものがあるかどうかを確認します。私は HTTP/IIS の専門家ではないので、これが一般的かどうかはわかりませんが、サーバーがロケールを指定している場合、ブラウザーはそれをデフォルトの CurrentCulture として使用している可能性があります。

しかし、Reflector を見ると、あなたの質問に対する答えは、ターゲット要素の Language プロパティが指定されていない限り、CultureInfo.CurrentUICulture を使用するということです。最も優先度が高いと思われるバインディング自体に ConverterCulture を設定することもできます。

于 2010-03-18T22:07:17.070 に答える
1

ここに短い記事があります:

http://en.csharp-online.net/Localization_Like_the_Pros%E2%80%94CurrentCulture_and_CurrentUICulture

于 2010-03-18T21:59:05.850 に答える