4

我正在尝试将 XAML StringFormat 应用于TimeSpan属性。

注意此问题适用于Windows Phone

对于 WPF,正确的语法是:

Text="{Binding ElapsedTime,StringFormat={}{0:m\\:ss}}"

对于 Silverlight,它需要单引号:

Text="{Binding ElapsedTime,StringFormat='{}{0:m\\:ss}'}"

但是对于 Windows Phone,无论我尝试了什么,输出始终是完整的“00:00:00.0000000”。

  • StringFormat='m\\:ss'
  • StringFormat='{}{0:m\\:ss}'
  • StringFormat='m\:ss'
  • StringFormat=m\\:ss

我是否以某种方式错过了正确的排列,或者这在 Windows Phone 中出于某种原因是不可能的?


更新

我使用了一种解决方法(下面的答案),但如果有人知道的话,我仍然想解释一下这种奇怪之处。(我说“怪异”是因为StringFormatDateTime属性完美结合,只是不适用于属性TimeSpan。)

更新#2

2010 年的一个非常相似的问题。也许这只是 .Net 的旧版本和/或“紧凑”版本的问题。或者这个答案( StringFormat=\{0:h\\:mm\}) 有用吗?

4

2 回答 2

3

这是对Timespan我创建的名为 ElapsedTime 的属性有用的东西。

Text="{Binding ElapsedTime,StringFormat={}{0:mm\\:ss}}"

完整格式

Text="{Binding ElapsedTime,StringFormat={}{0:dd\\.hh\\:mm\\:ss}}"
于 2013-09-08T04:54:03.967 回答
3

我最终使用了一种解决方法。

<TextBlock Text="{Binding DurationStr}" />

在视图模型中使用新属性:

public string DurationStr
{
    get { return Duration.ToString(@"m\:ss"); }
}

public TimeSpan Duration
{
    get { return _duration; }
    set
    {
        _duration = value;
        RaisePropertyChanged("Duration");
        RaisePropertyChanged("DurationStr");
    }
}
private TimeSpan _duration;
于 2013-09-09T16:40:40.317 回答