繁体   English   中英

WPF 覆盖当前文化并未反映在所有控件或 UI 元素中

[英]WPF Overriding Current Culture is not reflecting in all controls or in UI elements

TextBlock 显示为具有当前文化格式的“NumberFormatInfo.NumberGroupSizes”。 但是 DataGrid 以不同的格式显示从查询中绑定到“double”的列。 我在做什么错误?

        Thread.CurrentThread.CurrentCulture = new CultureInfo("en-IN");
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-IN");

        NumberFormatInfo myNumberFormatInfo = new CultureInfo("en-IN", true).NumberFormat;
        int[] myGroupSize = { 3, 2, 2, 2 };
        myNumberFormatInfo.NumberGroupSizes = myGroupSize;
        myNumberFormatInfo.CurrencyGroupSizes = myGroupSize;

        Thread.CurrentThread.CurrentCulture.NumberFormat = myNumberFormatInfo;
        Thread.CurrentThread.CurrentUICulture.NumberFormat = myNumberFormatInfo;

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

它已通过使用 System.Reflection 解决;

        var culture = CultureInfo.CurrentCulture;
        var language = XmlLanguage.GetLanguage(culture.IetfLanguageTag + "-current");
        var type = typeof(XmlLanguage);
        const BindingFlags kField = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly;
        type.GetField("_equivalentCulture", kField).SetValue(language, culture);
        type.GetField("_compatibleCulture", kField).SetValue(language, culture);
        if (culture.IsNeutralCulture) culture = CultureInfo.CreateSpecificCulture(culture.Name);
        type.GetField("_specificCulture", kField).SetValue(language, culture);
        FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata(language));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM