我的时间跨度为2h 30min 22sec
。但我需要以150min 22sec
格式限制UI的时间。怎么可能?任何内置函数或格式可用吗?
答案 0 :(得分:4)
根据您需要的总分钟数,您可以使用MultiBinding
。
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}min {1}sec">
<Binding Path="YourTimeSpan.TotalMinutes" Converter="{StaticResource ObjectToIntegerConverter}"/>
<Binding Path="YourTimeSpan.Seconds"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
编辑:
正如评论中所指出的,您必须将TotalMinutes
转换为整数,为此,您可以使用IValueConverter
。
public class ObjectToIntegerConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return System.Convert.ToInt32(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
请勿忘记在Resources
中声明,例如:
<Window
...
xmlns:Converters="clr-namespace:Your.Converters.Namespace">
<Window.Resources>
<Converters:ObjectToIntegerConverter x:Key="ObjectToIntegerConverter"/>
</Window.Resources>
答案 1 :(得分:3)
我对XAML方面不熟悉,但您可以将TimeSpan
格式化为
var ts = new TimeSpan(2, 30, 22);
Console.WriteLine(string.Format("{0}min {1}sec",
(int)ts.TotalMinutes,
ts.Seconds));
产生
150min 22sec
答案 2 :(得分:1)
自己制作:
public struct MyTimeSpan
{
private readonly TimeSpan _data;
public MyTimeSpan(TimeSpan data)
{
_data = data;
}
public override string ToString()
{
return string.Format("{0:f0}min {1}sec", _data.TotalMinutes, _data.Seconds);
}
}