【问题标题】:WPF TimeSpan binding to label without millisecondsWPF TimeSpan 绑定到标签,无需毫秒
【发布时间】:2012-05-22 06:54:45
【问题描述】:

在我当前的项目中,我试图显示一个具有 TimeSpan 绑定的标签。 其实 xaml 看起来很简单:

<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh\:mm}}"/>

这正是this question 中显示的内容。但它不起作用,它总是显示完整的时间,而不仅仅是小时+分钟。

我测试了很多解决方案,但都没有奏效。

【问题讨论】:

  • 您使用的是什么版本的 .NET? TimeSpan 仅在 .NET 4 中获得格式字符串。
  • @Asif 已经测试过了,还是不行。
  • @JonSkeet .NET 4.0,非客户端配置文件。这就是它不起作用的地方,这让我现在很生气。 :-/
  • 也许只是尝试使用TextBox 而不是Label 并绑定Text 而不是Content。您可以在此处找到绑定示例:stackoverflow.com/questions/4563081/…。让我知道它是否适合您。
  • 它适用于TextBlock,它是Label的轻量级等价物。每当您绑定到使用ContentPresenter 显示数据的控件中的依赖属性时,它似乎会吃掉您提供的StringFormat。 (在LabelButton 等)。希望有人能告诉我们原因!您可以将TextBlock 嵌套在Label 中,或者只使用TextBlock(除非您需要访问文本,否则通常是更好的选择)。

标签: c# wpf xaml data-binding


【解决方案1】:

它适用于TextBlock,它是Label 的轻量级等价物。每当您绑定到使用ContentPresenter 显示数据的控件中的依赖属性时,它似乎会吃掉您提供的StringFormat。 (在LabelButton 等)。希望有人能告诉我们原因!您可以在标签中嵌套TextBlock,或者只使用TextBlock(除非您需要访问文本,否则通常是更好的选择)。

【讨论】:

    【解决方案2】:

    建议的解决方案

    也许只是尝试使用TextBox 而不是Label 并绑定Text 而不是Content。您可以在此处找到绑定示例:How to format TimeSpan in XAML。还值得注意的是TextBlockLabel 更轻量级,因此应尽可能使用它。

    替代解决方案

    如果您出于某种原因想使用Labela property called ContentStringFormat 本身似乎有Label,因此您的xaml 可能如下所示:

    <Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal}" ContentStringFormat="hh\\:mm"/>
    

    另一种解决方案是实现自定义IValueConverter,您可以在其中将字符串格式作为转换器的参数传递,并在转换器的代码中手动格式化该值。然后,此解决方案应适用于所有适当的控件类型。有关价值转换器的更多信息,请参阅 herehere

    字符串格式属性

    正如 Erode 在评论中所写,似乎还有其他控件 StringFormat 不起作用。 但是,对于从ContentControl 派生的控件,您应该能够使用ContentStringFormat,对于从ItemsControl 派生的控件,有一个ItemStringFormat 属性。有几个示例的链接展示了如何使用这些示例: http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 2014-12-21
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多