2012-05-14 48 views
2

在我当前的项目中,我试图展示一个具有TimeSpan绑定的标签。 其实XAML看起来很简单:WPF TimeSpan绑定到标签毫秒毫秒

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

这恰恰是在this question所示。但它不起作用,它总是显示全部时间,而不仅仅是小时+分钟。

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

+0

您使用的是什么版本的.NET? TimeSpan仅在.NET 4中获得了格式字符串。 –

+0

试试这个StringFormat = HH:mm –

+0

@Asif已经测试过了,不起作用。 –

回答

2

建议的解决方案

也许只是尝试使用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,您可以在其中传递字符串格式作为转换器的参数,并在转换器的代码中手动设置该值。此解决方案应该适用于所有适当的控制类型。有关价值转换器的更多信息,请参阅herehere

字符串格式属性

由于侵蚀在评论中写道,有似乎是这StringFormat不起作用其他控件。 但是,对于源自ContentControl的控件,您应该能够使用ContentStringFormat,并且对于源自ItemsControl的控件,有一个ItemStringFormat属性。有几个样品展示了如何使用这些产品的链接: http://blogs.msdn.com/b/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

2

它与TextBlock一起使用,它与Label相当。无论何时您绑定到使用ContentPresenter显示数据的控件中的依赖项属性,它似乎都会吃掉您提供的StringFormat。 (在Label,Button等)。希望有人会让我们知道为什么!你可以在标签中嵌套一个TextBlock,或者直接使用TextBlock(除非你需要访问文本,反正通常是一个更好的选择)。