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

C# WPF TimeSpan绑定到标签,无需毫秒,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,在我当前的项目中,我试图显示一个具有TimeSpan绑定的标签。 实际上,xaml看起来很简单: <Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh\:mm}}"/> 这正是图中所示。但它不起作用,它总是显示全部时间,而不仅仅是小时+分钟 我测试了很多解决方案,但没有一个有效。建议的解决方案 可能只是尝试使用文本框而不是标签,并绑定文本而不是内容。您

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

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

这正是图中所示。但它不起作用,它总是显示全部时间,而不仅仅是小时+分钟


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

建议的解决方案


可能只是尝试使用
文本框
而不是
标签
,并绑定
文本
而不是
内容
。您可以在此处找到绑定的示例:。还值得注意的是,
TextBlock
Label
更轻量级,因此应该尽可能使用它

替代解决方案

如果出于某种原因想使用
标签
,则似乎有一个
标签
本身,因此您的xaml可以如下所示:

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

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

字符串格式属性

正如侵蚀在评论中写道的那样,似乎还有其他
StringFormat
不起作用的控件。 但是,对于从
ContentControl
派生的控件,您应该能够使用
ContentStringFormat
,对于从
ItemsControl
派生的控件,有一个
ItemStringFormat
属性。有一个链接,其中有几个示例介绍如何使用这些示例:

它与
TextBlock
一起工作,这是与
标签
相当的轻量级功能。每当您绑定到使用
ContentPresenter
显示数据的控件中的依赖项属性时,它似乎会吃掉您提供的
StringFormat
。(在
标签
按钮
等中)。希望有人能告诉我们为什么!您可以在标签中嵌套一个
TextBlock
,或者只使用
TextBlock
(除非您需要访问文本,否则这通常是一个更好的选择)。

您使用的是什么版本的.NET?TimeSpan仅在.NET 4中获得了格式字符串。@Asif已对其进行了测试,但不起作用。@jonsket.NET 4.0,非客户端配置文件。这就是问题所在,它不起作用,现在让我很生气-/可能只是尝试使用
文本框
而不是
标签
,并绑定
文本
而不是
内容
。您可以在此处找到绑定的示例:。让我知道它是否适用于您。它适用于TextBlock,它相当于Label。每当您绑定到使用
ContentPresenter
显示数据的控件中的依赖项属性时,它似乎会吃掉您提供的
StringFormat
。(在
标签
按钮
等中)。希望有人能告诉我们为什么!您可以在
标签中嵌套
TextBlock
,也可以只使用
TextBlock
(除非您需要访问文本,否则这通常是更好的选择)。