Binding.StringFormat 不遵守 CultureInfo.CurrentCulture

Binding.StringFormat doesn't adhere to CultureInfo.CurrentCulture

我在 windows phone.

上使用数据绑定时遇到奇怪的格式和货币问题

我检查了CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol,这是£

当我执行 string.Format("{0:C}", 30.30) 时,它也可以正确显示 £30.30

那么为什么下面的代码在使用数据绑定时会产生.30

Binding binding1 = new Binding(somePropertyName);
binding1.StringFormat = "{0:C}";

我不太熟悉 windows phone SDK,但在 WPF 中,绑定的 StringFormat 由 Language 属性 控制,而不是当前的线程文化信息。您可以在页面级别设置它,所有 children 将使用相同的语言。

这说明了语言 属性 如何独立于当前线程更改绑定的行为:

<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>