как присвоить длине видео максимальное значение панели прогресса

#c# #wpf

#c# #wpf

Вопрос:

Я хочу преобразовать естественную продолжительность видеофайла в секунды, потому что я хочу установить максимальное значение индикатора выполнения. Но у меня ошибка, подобная этому, УКАЗАННОЕ ПРИВЕДЕНИЕ НЕДОПУСТИМО.

           <ProgressBar Name="pb"  Height="23" VerticalAlignment="Center"  
                       Value="{Binding ElementName=Video, Path=Position,
                       Converter={StaticResource progressbarconvert}}" 
                       Maximum="{Binding ElementName=Video,Path=NaturalDuration,
                       Converter={StaticResource progressbarconvert}}"></ProgressBar>
  

Это мой обязательный код для индикатора выполнения.

         TimeSpan t = (TimeSpan)value;
        int seconds = t.Seconds;
        seconds  = t.Minutes * 60;
        seconds  = t.Hours * 360;
        return seconds;
  

Это ошибка моего кода конвертера. И у меня ошибка в значении TimeSpan t = (TimeSpan). В чем причина этой ошибки. Есть ли какое-либо альтернативное решение для присвоения длине видео максимального значения индикатора выполнения???

Комментарии:

1. Почему бы просто не сделать return (int)t.TotalSeconds; ? Кроме того, при отладке, какой тип value в отладчике, если вы это делаете value.GetType() ?

2. На самом деле тип значения является автоматическим, потому что я использую естественную длительность, поэтому возвращает автоматическое значение. Он показывает время после воспроизведения видео. Скотт, не могли бы вы помочь мне решить проблему.

3. У Ateik есть правильный ответ.

Ответ №1:

Во-первых, NaturalDuration имеет тип Duration , поэтому приведение будет отличаться от Position https://msdn.microsoft.com/en-us/library/system.windows.controls.mediaelement.naturalduration(v=vs.110).aspx?f=255amp;MSPPError=-2147217396

Во-вторых, при приведении к длительности вам нужно проверить значение HasTimeSpan, потому что, если видео не загружено и не воспроизведено, у вас еще не будет этого значения