我有一个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"/>
答案 0 :(得分:23)
对于标签,您需要使用ContentStringFormat:
<Label Content="{Binding Obs.Tstat}" ContentStringFormat="{}{0:0.##}"/>
<强>原因强>:
标签的Content
属性类型为object
,StringFormat
仅在绑定属性类型为String
时使用。
如果您使用TextBlock的Text
属性尝试代码,它将与StringFormat
一起使用,因为Text属性的类型为string。
答案 1 :(得分:3)
只是快速添加我想发布这些内容,以防其他任何人参与其中...我的应用程序使用本地化,因为它有多国支持,但我们也支持用户系统设置。我们注意到您的UI文化默认为ContentStringFormat
。
在我们的某个表单中导致了一个问题,即在您指定ContentStringFormat
时,用户在Windows设置中配置的计算机专用小数位置未得到遵守。
由于ContentPresenter只是采用字符串格式而没有您通常可以在绑定中指定的转换器文化,这意味着如果英语为my,则说明:0:N
的格式将只返回两位小数当前的UI文化,即使我在Windows设置上指定了5位小数。
在我们的例子中,我们应用了一些绑定覆盖来解决这个问题,但主要是想添加这些额外的信息以防其他人运行它;)