在我当前的项目中,我试图显示一个具有 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}}"/>
这正是这个问题中显示的内容。但它不起作用,它总是显示完整的时间,而不仅仅是小时+分钟。
我测试了很多解决方案,但都没有奏效。
建议的解决方案
也许只是尝试使用TextBox
而不是 aLabel
和 bindText
而不是Content
. 您可以在此处找到绑定示例:如何在 XAML 中格式化 TimeSpan。还值得注意的TextBlock
是,它更轻量级Label
,因此应尽可能使用它。
替代解决方案
如果您出于某种原因想使用Label
,似乎有一个称为ContentStringFormat
aLabel
本身的属性,因此您的 xaml 可能如下所示:
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal}" ContentStringFormat="hh\\:mm"/>
另一种解决方案是实现一个 custom 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
. 每当您绑定到使用 aContentPresenter
显示数据的控件中的依赖属性时,它似乎会吃掉StringFormat
您提供的内容。(在Label
、Button
等)。希望有人能告诉我们原因!您可以将 a 嵌套TextBlock
在 Label 中,或者只使用 a TextBlock
(除非您需要访问文本,否则通常是更好的选择)。