2

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

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

这正是这个问题中显示的内容。但它不起作用,它总是显示完整的时间,而不仅仅是小时+分钟。

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

4

2 回答 2

4

建议的解决方案

也许只是尝试使用TextBox而不是 aLabel和 bindText而不是Content. 您可以在此处找到绑定示例:如何在 XAML 中格式化 TimeSpan。还值得注意的TextBlock是,它更轻量级Label,因此应尽可能使用它。

替代解决方案

如果您出于某种原因想使用Label,似乎有一个称为ContentStringFormataLabel本身的属性,因此您的 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

于 2012-05-14T20:51:06.853 回答
2

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

于 2012-05-14T21:13:05.207 回答