2011-10-21 7 views
3

私の銀色のアプリケーションのデータグリッドに日付の列があります。私は24時間形式で表示する時間が必要です。SilverlightのUIカルチャ

CultureInfo cinf = Thread.CurrentThread.CurrentUICulture.Clone() as CultureInfo; 
    DateTimeFormatInfo f = cinf.DateTimeFormat.Clone() as DateTimeFormatInfo; 
    System.Globalization.DateTimeFormatInfo df = new System.Globalization.DateTimeFormatInfo(); 
    string format = "MM/dd/yyyy HH:mm:ss"; 
    f.FullDateTimePattern = format; 
    cinf.DateTimeFormat = f; 
    Thread.CurrentThread.CurrentUICulture = cinf; 

をしかし、UIはいつも私のOS上で私の地域設定で指定されたdatatimeフォーマットをピックアップ:これを実現するために私はこのようなApplication_StartupイベントでUIカルチャを変更しました。 ポインタはありますか?

Thread.CurrentThread.CurrentCulture = cinf; 

答えて

0

はそれがあるだけでなくCurrentCultureを設定してみてください?何かのように: - あなたのコードが動作しない理由を

<sdk:DataGridTextColumn Header="SomeDate" Binding="{Binding SomeDate, StringFormat={}{0:MM/dd/yyyy HH:mm:ss}}" /> 

理由は、XAMLによってロードされたコントロールで使用CultureInfoは、XAMLを読み込み、コントロールのLanguageプロパティによって定義されていることです。このシナリオでカスタムCultureInfoを提供する方法はないと思います。

+0

あなたの役に立ったか – andrew

+0

はい私はCurrentCultureとCurrentUICultureの両方を設定しようとしましたが、UIは12時間形式でレンダリングします。興味深いのは、ビューモデルクラスにブレークポイントを置くと、フォーマットは24時間形式で表示されるということです。 !!! – Avinash

0

THER自体の結合にフォーマットする必要定義するほうがよいのではないでしょう:

+0

DateTimeオブジェクトを返すという絶対条件があります。文字列を返すバインディングコンバーターを使用することはできません。私は列のデータ型に依存する各列にフィルターを持っています。私はXAMLの "Language"プロパティを試してみました。文化は設定した言語に基づいて反映されていますが、その言語の設定もOS設定から取得されます。 ? – Avinash

+0

@avinash:通常、ICollectionViewの実装を通してフィルタリングしますが、これはバインディングが発生する前にオブジェクトの着信セットに適用されます。それ以外にも、 'StringFormat'は、ターゲットプロパティが割り当てられていない限り、' String'を要求しているとは限りません( 'DataGridTextColumn'に対してこれが当てはまります)。おそらく、a)あなたはそれを行かなければならず、b)xamlとコードの詳細を含んでいなければならない。 – AnthonyWJones

関連する問題