【问题标题】:Xaml Binding Fails to Detect custom cultureXaml 绑定无法检测自定义区域性
【发布时间】: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


【解决方案1】:

我不确定它是否适合您,但我记得有一次我解决了类似的问题,但涉及日期格式。我使用 ConverterCulture 属性进行绑定:

<TextBox Text="{Binding Path=Date, ConverterCulture={x:Static Globalization:CultureInfo.CurrentCulture}}"/>

【讨论】:

  • 哇!有效。你知道这背后的原因是什么吗?
  • 您认为有可能找到一种方法将其应用于应用程序级别吗?
  • 据我所知,原因是 ConverterCulture 默认没有设置 CurrentCulture。对此有很多抱怨。我不知道这背后是否有什么严重的原因.. 但我会说这只是错误/疏忽。
  • 将它应用到应用程序级别...嗯.. 可能可以编写自己的 xaml 标记扩展 :) 但很难说.. 目前不知道
  • 也许可以实现一些实用方法,在代码后面的某个地方遍历所有绑定并设置它们的 ConverterCulture
猜你喜欢
  • 2011-12-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2014-12-18
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多