在 Windows Phone 上使用数据绑定(bind)时,我遇到了一个奇怪的格式和货币问题。
我检查了 CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol
,这是 £
当我执行 string.Format("{0:C}", 30.30)
时,它也会正确显示 £30.30
。
那么为什么以下代码在使用数据绑定(bind)时会产生 $30.30
?
Binding binding1 = new Binding(somePropertyName);
binding1.StringFormat = "{0:C}";
我不太熟悉 Windows Phone SDK,但在 WPF 中,绑定(bind)的 StringFormat 由 Language 控制属性,而不是当前的线程文化信息。您可以在页面级别设置它,所有 child 将使用相同的语言。
这说明了语言属性如何独立于当前线程改变绑定(bind)的行为:
<StackPanel Language="nb-NO">
<Slider Name="slider" />
<TextBlock Text="{Binding ElementName=slider, Path=Value, StringFormat=C2}" />
<TextBlock Language="en-US" Text="{Binding ElementName=slider, Path=Value, StringFormat=C2}" />
</StackPanel>