WPF TimeSpan 绑定到标签,无需毫秒
本文关键字:标签 TimeSpan 绑定 WPF | 更新日期: 2023-09-27 18:34:04
在我当前的项目中,我正在尝试显示一个具有TimeSpan绑定的标签。实际上,xaml看起来很简单:
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh':mm}}"/>
这正是这个问题所显示的。但它不起作用,它总是显示全职时间,而不仅仅是小时 + 分钟。
我测试了很多解决方案,但没有一个有效。
建议的解决方案
也许只是尝试使用TextBox
而不是Label
并绑定Text
而不是Content
。可以在此处找到绑定示例:如何在 XAML 中设置时间跨度的格式。还值得注意的是,TextBlock
比 Label
更轻,因此应尽可能使用它。
替代解决方案
如果出于某种原因想要使用 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
。(Label
、Button
等(。希望有人能告诉我们为什么!您可以在标签中嵌套TextBlock
,也可以只使用TextBlock
(除非您需要访问文本,否则这通常是更好的选择(。