WPF TimeSpan 绑定到标签,无需毫秒

本文关键字:标签 TimeSpan 绑定 WPF | 更新日期: 2023-09-27 18:34:04

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

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

这正是这个问题所显示的。但它不起作用,它总是显示全职时间,而不仅仅是小时 + 分钟。

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

WPF TimeSpan 绑定到标签,无需毫秒

建议的解决方案

也许只是尝试使用TextBox而不是Label并绑定Text而不是Content。可以在此处找到绑定示例:如何在 XAML 中设置时间跨度的格式。还值得注意的是,TextBlockLabel 更轻,因此应尽可能使用它。

替代解决方案

如果出于某种原因想要使用 Label,似乎有一个属性称为Label本身的ContentStringFormat,因此 xaml 可能如下所示:

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

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

字符串格式属性

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

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