c# - 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)));
解决方案
它已通过使用 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));
推荐阅读
- scala - 从 hello-world 创建 scala 项目时出现 InvalidPathException
- latex - 你能用 LaTeX 语言挖掘加密货币吗?
- arrays - 从 bash 数组中打印出文件名
- windows - Windows 10:获得远程访问权限后,远程启动 Quick Assist 为 .\Administrator without UAC,或暂时禁用 UAC
- r - R:2组的3D散点图未显示在浏览器中
- oracle11g - Oracle - 在 EST 中转换和显示 sysdate
- vue.js - VueJS:在基于类选择器的旧版 HTML 上添加工具提示组件?
- wso2is - 重置密码重定向到 myaccount 无法按预期工作
- reactjs - 仅从 API 获取数据一次并在客户端过滤
- loops - 如何在 Pentaho ETL 中执行 FOR I in.. 循环