首页 > 解决方案 > WPF 覆盖当前文化并未反映在所有控件或 UI 元素中

问题描述

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)));

标签: c#wpf

解决方案


它已通过使用 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));

推荐阅读