WPF TimeSpan绑定到标签而没有毫秒

时间:2012-05-14 18:48:19

标签: c# wpf xaml data-binding

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

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

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

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

2 个答案:

答案 0 :(得分:3)

建议的解决方案

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

替代解决方案

如果您出于某种原因要使用LabelLabel本身似乎有a property called ContentStringFormat,那么您的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

答案 1 :(得分:2)

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