【发布时间】:2023-03-19 18:46:01
【问题描述】:
互联网上的所有文章都建议让 XAML 绑定检测操作系统中选择的区域性,应使用此行。
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement), new FrameworkPropertyMetadata((XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))));
问题在于 Windows 中的区域设置允许用户以用户想要的任何方式自定义日期和数字的格式。 例如,假设用户想要 3 个十进制数字而不是 2 个。他转到区域设置并进行此更新。问题是 Xaml 绑定中没有发现这种变化
<TextBlock Text="{Binding Payments, StringFormat=C}" /> <!--display 2 digits-->
奇怪的是,在后面的代码中,如果我使用 ToString("C") 我将成功获得我在服务器端所做的任何自定义。
decimal sampleNumber = 1.123;
string s = sampleNumber.ToString("C"); //Puts 3 digits in the string variable
我的解决方法是使用自定义转换器,我在其中执行 ToString 并将字符串返回到绑定。但奇怪的是我还没有看到这个问题(这很可能是 WPF 中的一个错误)张贴在网上的任何地方。 我错过了什么吗?
【问题讨论】:
-
这是一个类似的 [post][1],代码中的解决方案似乎有效。 [1]:stackoverflow.com/questions/2764615/…
-
我不是在抱怨无法检测到所选的文化。这工作正常。我抱怨无法检测到您对所选文化所做的任何自定义。
标签: wpf globalization culture