我正在尝试将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中出于某种原因这是不可能的?
更新
我使用了一种解决方法(下面的答案),但如果有人知道的话,仍然会想要解释这种奇怪的东西。 (我说“古怪”,因为StringFormat
与DateTime
属性完美匹配,而不是TimeSpan
属性。)
更新#2
A very similar question from 2010。也许这只是.Net的旧版和/或“紧凑版”的问题。或者this answer(StringFormat=\{0:h\\:mm\}
)会工作吗?
答案 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;