使用StringFormat的WPF格式标签

时间:2014-03-23 18:13:03

标签: c# wpf

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

在datagrids中,我一直在使用下面这一行来确保这些值只显示两个小数位,这是有效的。但是,当我使用下面相同的行作为我的标签时,它似乎对显示没有影响,因为数字显示为大约9位小数。我不明白为什么它适用于datagrid但不适用于标签?

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 个答案:

答案 0 :(得分:23)

对于标签,您需要使用ContentStringFormat

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

<强>原因

标签的Content属性类型为objectStringFormat仅在绑定属性类型为String时使用。

如果您使用TextBlock的Text属性尝试代码,它将与StringFormat一起使用,因为Text属性的类型为string。

答案 1 :(得分:3)

只是快速添加我想发布这些内容,以防其他任何人参与其中...我的应用程序使用本地化,因为它有多国支持,但我们也支持用户系统设置。我们注意到您的UI文化默认为ContentStringFormat

在我们的某个表单中导致了一个问题,即在您指定ContentStringFormat时,用户在Windows设置中配置的计算机专用小数位置未得到遵守。

由于ContentPresenter只是采用字符串格式而没有您通常可以在绑定中指定的转换器文化,这意味着如果英语为my,则说明:0:N的格式将只返回两位小数当前的UI文化,即使我在Windows设置上指定了5位小数

在我们的例子中,我们应用了一些绑定覆盖来解决这个问题,但主要是想添加这些额外的信息以防其他人运行它;)