From f3d6db38955a5697a93133f60626c320f2958a9f Mon Sep 17 00:00:00 2001 From: CQ Chen Date: Wed, 22 Jul 2020 00:38:21 +0800 Subject: [PATCH] Make the progress text consistent in player view --- AilianBT/AilianBT.csproj | 3 +- ...anConverter.cs => TimeSpanStrConverter.cs} | 13 ++++++-- .../Converters/TimeSpanToDoulbeConverter.cs | 31 +++++++++++++++++++ AilianBT/Views/Controls/PlayerView.xaml | 13 +++++--- AilianBT/Views/Controls/PlayerView.xaml.cs | 6 +++- 5 files changed, 57 insertions(+), 9 deletions(-) rename AilianBT/Converters/{TimeSpanConverter.cs => TimeSpanStrConverter.cs} (51%) create mode 100644 AilianBT/Converters/TimeSpanToDoulbeConverter.cs diff --git a/AilianBT/AilianBT.csproj b/AilianBT/AilianBT.csproj index cfb2b53..72dba4e 100644 --- a/AilianBT/AilianBT.csproj +++ b/AilianBT/AilianBT.csproj @@ -60,7 +60,8 @@ App.xaml - + + diff --git a/AilianBT/Converters/TimeSpanConverter.cs b/AilianBT/Converters/TimeSpanStrConverter.cs similarity index 51% rename from AilianBT/Converters/TimeSpanConverter.cs rename to AilianBT/Converters/TimeSpanStrConverter.cs index 94f97d6..d5e447d 100644 --- a/AilianBT/Converters/TimeSpanConverter.cs +++ b/AilianBT/Converters/TimeSpanStrConverter.cs @@ -3,11 +3,20 @@ namespace AilianBT.Converters { - public class TimeSpanConverter:IValueConverter + public class TimeSpanStrConverter:IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { - return ((TimeSpan)value).ToString(@"mm\:ss"); + TimeSpan duration; + if (value is double seconds) + { + duration = TimeSpan.FromSeconds(seconds); + } + else + { + duration = (TimeSpan)value; + } + return duration.ToString(@"mm\:ss"); } public object ConvertBack(object value, Type targetType, object parameter, string language) diff --git a/AilianBT/Converters/TimeSpanToDoulbeConverter.cs b/AilianBT/Converters/TimeSpanToDoulbeConverter.cs new file mode 100644 index 0000000..09e8131 --- /dev/null +++ b/AilianBT/Converters/TimeSpanToDoulbeConverter.cs @@ -0,0 +1,31 @@ +using System; +using Windows.UI.Xaml.Data; + +namespace AilianBT.Converters +{ + public class TimeSpanToSecondConverter:IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + return ((TimeSpan)value).TotalSeconds; + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } + + public class SecondToTimeSpanConverter : IValueConverter + { + public object Convert(object value, Type targetType, object parameter, string language) + { + return TimeSpan.FromSeconds((double)value); + } + + public object ConvertBack(object value, Type targetType, object parameter, string language) + { + throw new NotImplementedException(); + } + } +} diff --git a/AilianBT/Views/Controls/PlayerView.xaml b/AilianBT/Views/Controls/PlayerView.xaml index aa182b6..9f2d9fd 100644 --- a/AilianBT/Views/Controls/PlayerView.xaml +++ b/AilianBT/Views/Controls/PlayerView.xaml @@ -247,7 +247,9 @@ - + + + @@ -330,7 +332,7 @@ FocusVisualPrimaryBrush="#FFE2E2E2" FontSize="12" Foreground="#FFE4E4E4" - Text="{x:Bind _playerVM.CurrentMusic.Position, Mode=OneWay, Converter={StaticResource DurationConverter}}" /> + Text="{x:Bind sliderProgress.Value, Mode=OneWay, Converter={StaticResource TimeSpanStrConverter}}" /> + Text="{x:Bind _playerVM.CurrentMusic.Length, Mode=OneWay, Converter={StaticResource TimeSpanStrConverter}}" /> + ThumbToolTipValueConverter="{StaticResource TimeSpanStrConverter}" + Value="{x:Bind _playerVM.CurrentMusic.Position, Mode=OneWay, Converter={StaticResource TimeSpanToSecondConverter}}" /> diff --git a/AilianBT/Views/Controls/PlayerView.xaml.cs b/AilianBT/Views/Controls/PlayerView.xaml.cs index 251e5e8..594edc5 100644 --- a/AilianBT/Views/Controls/PlayerView.xaml.cs +++ b/AilianBT/Views/Controls/PlayerView.xaml.cs @@ -126,7 +126,11 @@ private void _sliderProgressPointerPressed(object sender, PointerRoutedEventArgs private void _sliderProgressPointerReleased(object sender, PointerRoutedEventArgs e) { - _playerVM.Seek(sliderProgress.Value / (sliderProgress.Maximum - sliderProgress.Minimum)); + var length = (sliderProgress.Maximum - sliderProgress.Minimum); + if (length > 0) + { + _playerVM.Seek(sliderProgress.Value / length); + } _playerVM.Seeking = false; } #endregion