在我当前的项目中,我试图展示一个具有TimeSpan绑定的标签。 其实XAML看起来很简单:WPF TimeSpan绑定到标签毫秒毫秒
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh\:mm}}"/>
这恰恰是在this question所示。但它不起作用,它总是显示全部时间,而不仅仅是小时+分钟。
我测试了很多解决方案,但都没有工作。
在我当前的项目中,我试图展示一个具有TimeSpan绑定的标签。 其实XAML看起来很简单:WPF TimeSpan绑定到标签毫秒毫秒
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh\:mm}}"/>
这恰恰是在this question所示。但它不起作用,它总是显示全部时间,而不仅仅是小时+分钟。
我测试了很多解决方案,但都没有工作。
建议的解决方案
也许只是尝试使用TextBox
代替Label
并结合Text
而不是Content
。你可以在这里找到绑定的例子:How to format TimeSpan in XAML。值得注意的是,TextBlock
更加轻量,因此Label
应该尽可能使用。
替代方案
如果你想使用Label
出于某种原因,似乎有一个Label
本身的a property called ContentStringFormat
,所以你的XAML可以看起来像:
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal}" ContentStringFormat="hh\\:mm"/>
另一个解决方案是实现自定义IValueConverter
,您可以在其中传递字符串格式作为转换器的参数,并在转换器的代码中手动设置该值。此解决方案应该适用于所有适当的控制类型。有关价值转换器的更多信息,请参阅here和here。
字符串格式属性
由于侵蚀在评论中写道,有似乎是这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
(除非你需要访问文本,反正通常是一个更好的选择)。
您使用的是什么版本的.NET? TimeSpan仅在.NET 4中获得了格式字符串。 –
试试这个StringFormat = HH:mm –
@Asif已经测试过了,不起作用。 –