XamlのBindingのStringFormatはTimeSpanでろくに機能しないようなので自前実装。日付を消したりできる。
ConverterParameterでレイアウト指定。
表記 | 内容 |
---|---|
[Days][Hours][Milliseconds][Minutes][Seconds][Ticks] | TimeSpanの時分秒などの要素で単純に表示 |
[TotalDays] etc | TimeSpanを時分秒単位で表示 |
[TotalDaysFloor] etc | TimeSpanを時分秒単位で切り捨てて表示(整数) |
[TotalDays:\{0:00\}] etc | TimeSpanの表示をString.Format()の形式で表示。 {0:00}では0埋め二桁 |
[if:TotalMinutesFloor:words...] | TimeSpanの時分秒が0以上ならwords...を表示 |
基本的に入れ子には非対応。ただし[Time]→[Time:Layout]→[if:Time:words]の順で処理するので後者に入れ子はできる。 また単なる[]もそのまま表示できるはず。
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:vc="clr-namespace:SampleApp.ValueConverters"
x:Class="SampleApp.Views.MainPage"
>
<ContentPage.Resources>
<vc:TimeSpanFormatValueConverter x:Key="tsfVC" />
</ContentPage.Resources>
<Label Text="{Binding Path=ElapsedTime,Converter={StaticResource tsfVC},ConverterParameter='経過時間 : [if:TotalMinutesFloor:[TotalMinutesFloor:\{0:00\}]分][Seconds:\{0:00\}]秒'}" />
,ConverterParameter='経過時間 : [if:TotalMinutesFloor:[TotalMinutesFloor:\{0:00\}]分][Seconds:\{0:00\}]秒'
で0m2sなら02秒、02m5sなら02分05秒、1h23m45sなら72分45秒の表示になる。
2m0sなら02分00秒になる。