WPF XAML StringFormat : Culture Workaround broken in C# 4. 0?

标签 wpf c#-4.0 string-formatting

周围的工作...

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

...曾经工作到现在(这里提到: StringFormat Localization issues in wpf )。

相反,直到我将我的应用程序从 3.5SP1 移植到 4.0 之前,它一直在工作。但是现在在 4.0 中它再次停止工作。有人经历过吗?

编辑:它现在甚至不能在 3.5SP1 中工作。我认为这与 4.0 的安装有关,因为以前这是有效的。

添加变通方法或删除它都不起作用。我什至尝试添加...
CultureInfo.CurrentCulture.ClearCachedData();
this.Language = XmlLanguage.GetLanguage( CultureInfo.CurrentCulture.IetfLanguageTag);

Window构造函数。这也没有奏效。

最佳答案

1. 确保您覆盖默认值 LanguageProperty越早越好。应用程序的静态构造函数是最好的选择。这很重要,因为 BindingExpression缓存此属性的值,之后不会出于性能原因重新评估它。

2. 你是什​​么CultureInfo.CurrentCulture ?你确定这是你希望看到的吗?

3. 覆盖 Language如果您指定 xml:lang,则属性元数据无效属性在树上的某个地方。例如。如果你说:

<StackPanel xml:lang="it">
  <TextBlock Text="{Binding StringFormat=C}"/>
</StackPanel>

无论您在属性元数据中设置什么,您都将获得意大利货币。

4. 覆盖 Language如果您指定 ConverterCulture,则属性元数据无效具有约束力的属性(property)。例如。如果你说:<TextBlock Text="{Binding StringFormat=C, ConverterCulture=ja}"/>无论您在属性元数据或 xml:lang 中设置什么,您都将获得日本货币属性。

据我所知,这种行为在框架之间没有改变。

希望这可以帮助

关于WPF XAML StringFormat : Culture Workaround broken in C# 4. 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2689771/

相关文章:

c# - 我不断收到输入字符串的格式不正确的信息

c# - 哪个换行符同时适用于 C# 和 HTML?

authentication - asp.net mvc 3 : Page. User.IsInRole ("xy") 返回 null

java - CSVReader 无法正确读取一行

common-lisp - 左对齐零填充

c# - C#中的字符串格式化

c# - 自动展开 treeViewItem

c# - WPF 反向绑定(bind) OneWayToSource

WPF - 路径/几何帮助 - 奇怪的形状

c# - 具有 IMEX 1 的 OleDBConnection 忽略时间值中的 AM/PM