WPF使用StringFormat格式化标签

11

我有一个WPF应用程序。我有一些标签和一些数据网格,这些网格绑定到一些公共属性。其中一些属性是数值。

在数据网格中,我一直使用下面的代码行确保值仅显示两个小数位,这有效。但是当我为我的标签使用相同的代码行时,似乎对显示没有影响,因为数字显示了约9个小数位。我不明白为什么它适用于数据网格而不适用于标签?

StringFormat={}{0:0.##}



<Label Grid.Row="3" Grid.Column="1"
       Content="{Binding Obs.Tstat, StringFormat={}{0:0.#}}" 
       HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
       FontSize="13" FontWeight="Bold"/>

更新后的代码

 <Label Grid.Row="3" Grid.Column="1"
        Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.#}}" 
        HorizontalAlignment="Center" Foreground="{StaticResource brushLinFont}" 
        FontSize="13" FontWeight="Bold"/>
2个回答

34

您需要使用ContentStringFormat来设置标签:

<Label Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.##}"/>

原因:

标签的Content属性是object类型,只有当绑定属性是String类型时才会使用StringFormat

如果您尝试用TextBlock的Text属性运行您的代码,这将可以正常工作,因为Text属性是字符串类型。


我明白了,这就是为什么我的数据网格里它可以工作的原因。我已经修改了我的代码使用ContentStringFormat,但是答案仍然显示太多小数位 - 我还漏掉了其他什么吗? - mHelpMe
它在我的端上完全正常工作,并且仅显示小数点后两位数字。Obs.Tstat的边界值是多少? - Rohit Vats
Obs.Tstat 的类型为 double,显示的值为 1.3536。我已经编辑了我的帖子以展示我所拥有的内容。 - mHelpMe
你的ContentStringFormat中多了一个花括号。应该是"{}{0:0.#}"而不是"{}{0:0.#}}"。请删除最后一个多余的花括号。 - Rohit Vats

3

我想在这方面快速补充一点内容,以防其他人遇到类似情况...我的应用程序使用本地化,因为它支持多国家,但我们也支持用户的系统设置。我们注意到ContentStringFormat默认为您的UI文化。

这在我们的某个表单中引起了问题,因为当您指定ContentStringFormat时,用户在Windows设置中配置的机器特定小数位没有被尊重。

由于ContentPresenter仅采用字符串格式而不是绑定中通常可以指定的转换器文化,这意味着例如格式0:N只有在英语是当前UI文化时才返回两个小数位,即使我在Windows设置中指定了5个小数位。

在我们的情况下,我们应用了一些绑定覆盖来解决这个问题,但主要是想添加这个额外的信息,以防其他人遇到类似情况;)


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