Windows Phone XAML中的TimeSpan字符串格式

时间:2013-09-08 00:58:44

标签: c# silverlight xaml windows-phone-7 windows-phone

我正在尝试将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

A very similar question from 2010。也许这只是.Net的旧版和/或“紧凑版”的问题。或者this answerStringFormat=\{0:h\\:mm\})会工作吗?

2 个答案:

答案 0 :(得分:3)

对于我创建的名为ElapsedTime的Timespan属性,这对我有用。

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

完整格式

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

答案 1 :(得分: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;