【问题标题】:WPF formatting labels with StringFormatWPF 使用 StringFormat 格式化标签
【发布时间】:2017-07-19 04:38:46
【问题描述】:

我有一个 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"/>

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    标签需要使用ContentStringFormat:

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

    原因

    标签的Content 属性为object 类型,而StringFormat 仅在绑定属性为String 类型时使用。

    如果您尝试使用 TextBlock 的 Text 属性的代码,它可以与 StringFormat 一起正常工作,因为 Text 属性是字符串类型。

    【讨论】:

    • 我明白为什么它在我的数据网格中工作是有道理的。我已将代码更改为使用 ContentStringFormat 但答案仍显示为许多小数位 - 还有什么我遗漏的吗?
    • 它在我的最后工作得很好,只显示小数点后的两位数。 Obs.Tstat 的边界值是多少?
    • Obs.Tstat 是 double 类型,显示的值为 1.3536。我编辑了我的帖子以显示我所拥有的
    • 您的 ContentStringFormat 中有一个额外的大括号。它应该是 "{}{0:0.#}" 而不是 "{}{0:0.#}}"。删除最后一个额外的花括号。
    【解决方案2】:

    我想快速补充一下,以防其他人碰到它...我的应用程序使用本地化,因为它支持多国,但我们也支持用户的系统设置。我们注意到 ContentStringFormat 默认为您的 UI 文化。

    这导致我们的一种形式出现问题,当您指定 ContentStringFormat 时,用户在 Windows 设置中配置的机器特定小数位未得到遵守。

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-28
      • 2023-03-21
      • 2011-04-19
      • 2023-04-01
      • 1970-01-01
      • 2018-11-22
      • 2018-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多