を参照して、明示的に文化を指定していない任意のバインディングは、インバリアントカルチャを使用します。代わりに。つまり、現在の地域の設定を無視して、アメリカの日付と数字の形式を取得します。
これは長年にわたる問題であり、WPFチームは「設計通り」と考えています。 standard workaround
はFrameworkElement
のLanguage
プロパティのプロパティメタデータを上書きすることです:
FrameworkElement.LanguageProperty.OverrideMetadata(
typeof(FrameworkElement),
new FrameworkPropertyMetadata(
XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));
これは、あなたが任意のUIを表示する前に実行する必要があります - 通常OnStartup
イベントで。
残念ながら、これはFrameworkElement
から派生した要素の問題のみを解決します。たとえば、Run
要素はFrameworkContentElement
から派生しているため、この変更の影響を受けません。 FrameworkContentElement
のメタデータを上書きすることはできません。すでにオーバーライドされています。
別の方法としては、常にCultureInfo.CurrentCulture
に文化を初期化するカスタムバインディングを作成して使用することです:
public class CultureBinding : System.Windows.Data.Binding
{
public CultureBinding(string path) : base(path)
{
ConverterCulture = CultureInfo.CurrentCulture;
}
public CultureBinding()
{
ConverterCulture = CultureInfo.CurrentCulture;
}
}
DateOfBirthは「DateTime」ですか?ロケールの設定はフォーマットに影響する可能性があります。 NA \ EUの混乱のように見えます。 – icebat