0

アプリのメイン ページに日付をフランス語形式で表示したいと思います: (dd/MM/yyyy) Entity Framework オブジェクトを操作します。日付は、xaml ファイルのコンボボックスにバインドされたエンティティ リストのプロパティです。 .

アプリの起動時に次のコードを追加することで、なんとかこれを乗り越えることができました。

FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

しかし、この追加で新しい問題が発生します。すべての 10 進数は、アプリの他のページでドットを使用する代わりにコンマを使用しています...ma アプリは、この変更で動作しなくなりました...

それで、グローバルな方法で問題を解決する解決策を教えていただけませんか...要約すると、フランス語の日付形式とドット付きの10進数が必要です。コードの行ごとにカルチャを変更する必要はありません。

関連するページにこの行を追加しようとしましたが、うまくいきませんでした。

 Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

ありがとう

4

2 に答える 2

4

1 つのコントロールで日付の書式設定を変更するだけの場合は、アプリケーション全体のロケールを変更することはできません。にカスタムItemTemplateComboBox設定し、 に を設定しStringFormatます。Binding'dd/MM/yyyy'

アプリケーション全体で日付形式を本当に変更する必要があるが、他の形式はそのままにしておく場合は、現在のロケールに基づいて起動時にカスタム ロケールを適用できますが、WPF で適切に動作させるには厄介なリフレクションが必要です .

var currentCulture = CultureInfo.CurrentCulture;
if (currentCulture.IsReadOnly)
    currentCulture = new CultureInfo(currentCulture.IetfLanguageTag, true);

currentCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

// ...adjust other patterns accordingly...

// WARNING: Ugly reflection hacking ahead...

var defaultValueField = typeof(PropertyMetadata).GetField(
    "_defaultValue",
    BindingFlags.NonPublic | BindingFlags.Instance);

var equivalentCultureField = typeof(XmlLanguage).GetField(
    "_equivalentCulture",
    BindingFlags.NonPublic | BindingFlags.Instance);

if (defaultValueField != null &&
    equivalentCultureField != null)
{
    var xmlLanguage = XmlLanguage.GetLanguage(currentCulture.IetfLanguageTag);

    equivalentCultureField.SetValue(
        xmlLanguage,
        currentCulture);

    defaultValueField.SetValue(
        FrameworkElement.LanguageProperty.DefaultMetadata,
        xmlLanguage);
}

Thread.CurrentThread.CurrentCulture = currentCulture;
Thread.CurrentThread.CurrentUICulture = currentCulture;

起動プロセスのできるだけ早い段階で、必ずメイン スレッドから実行してください。ただし、これWPF のビジュアル ビットだけでなく、プログラム全体に影響することに注意してください。たとえば、ログのタイムスタンプ形式などに影響を与える可能性があります。

yyyy-MM-dd個人的には、複数のロケールを持つ会社で働く者として、すべての日付に ISO 標準形式を単純に使用する方が混乱が少ないと思います。d/MM/yyyyおよびMM/d/yyyy形式は廃止する必要があります。

于 2014-08-22T14:33:21.483 に答える
0

1 つの解決策は、地域に基づいて同じキーと値を持つ異なるリソース ファイルを用意し、カルチャを使用してそれぞれの地域の値を読み込むことです。

于 2014-08-22T14:20:17.757 に答える