在绑定中更改默认的千位分隔符和小数点分隔符

8

假设我有一个数字 1234567.89。该数字以 WPF TextBlock 的形式显示。我试图对 Text 属性应用 StringFormat 属性,以便数字像这样显示:

1.234.567,89

正如您所看到的,千位分隔符和小数点分隔符与不变文化规范相反。

我尝试了多种StringFormat的组合,但都没有成功。这是我最新想出来的:

Text="{Binding SomeBinding, StringFormat={}{0:#'.'##0','00}}"

但输出结果并不正确,而且使用N2或更改语言环境也不是一个选项。如果可能的话,我想避免使用转换器。

那么,有没有一种通过XAML来更改默认分隔符的方法呢?

1个回答

13
您不必改变文化。只需使用指定的文化(de-DE应该可以)与String.Format一起使用即可:
string output = String.Format(new CultureInfo("de-DE"), "{0:N}", yourDoubleValue);

输出:9.164,32

如果您想在XAML中执行此操作,可以尝试以下方法:

Text="{Binding SomeBinding, StringFormat={}{0:N}, ConverterCulture=de-DE}"

我认为他试图在XAML中完成所有的工作,但我不认为这可以在没有引入一些C#的情况下完成,至少需要使用自定义转换器。 - Woodman
组合StringFormat=N2,ConverterCulture=de将创建所需的输出,无需任何额外的代码。 - Clemens
@Clemens 感谢您的评论。我无法测试代码,这只是我的建议。 - Andrey Gordeev
工作了!谢谢 :) 只需编辑帖子,将StringFormat = {} {0:N}替换为StringFormat = {} {0:#'.'##0','00},以免混淆任何人。 - Miloš Ranđelović
请注意,Binding StringFormat无法自动选择当前区域设置,存在问题:https://dev59.com/u0fSa4cB1Zd3GeqPBv7- - Duncan Matheson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接