在我目前的项目中,我正在尝试显示一个具有TimeSpan绑定的标签。 实际上xaml看起来很简单:
<Label Content="{Binding ElementName=Root, Path=DataSource.TimeTotal, StringFormat={}{0:hh\:mm}}"/>
这正是this question中显示的内容。但它不起作用,它总是显示全部时间而不仅仅是几小时+分钟。
我测试了很多解决方案,但都没有。
答案 0 :(得分:3)
建议的解决方案
也许只是尝试使用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。
字符串格式设置属性
在评论中写了 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
。 (在Label
,Button
等)。希望有人能告诉我们原因!您可以在标签中嵌套TextBlock
或只使用TextBlock
(除非您需要访问文本,否则通常是更好的选择)。