Привязка MediaElement к положению ползунка

У меня есть MediaElement и Slider. Как я могу привязать MediaElement.Position к Slider.Value без DispatcherTimer?


person user1524578    schedule 04.08.2012    source источник


Ответы (1)


ОК, ТАК это МОГУТ быть таковым:

<Slider 
    x:Name="PositionSlider"  
    Minimum="0" 
    Maximum="{Binding 
                  ElementName=mediaElement,  
                  Path=mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds}"   
 />

<MediaElement 
    x:Name="mediaElement"
    Position="{Binding Value, 
               ElementName=PositionSlider, 
               Converter={StaticResource MyMsToTimeSpanConverter}}"  />

!! НО !! Позиция не является свойством зависимости, поэтому вы не можете выполнять для нее какие-либо привязки. Когда вы говорите «это не работает»… УВЕРЕН, что это не работает и никогда не будет. привязка требует свойств зависимостей.

Поэтому вы должны поступать так же, как Microsoft для своей небольшой демонстрации MediaElement: обрабатывать все в коде позади.
http://msdn.microsoft.com/en-us/library/ms748248.aspx

person GameAlchemist    schedule 04.08.2012
comment
да. Я поставил Minimum=0 Maximum={Binding ElementName=mediaElement, Path=mediaElement.NaturalDuration.TimeSpan.TotalMilliseconds} , но Value={Binding ElementName=mediaElement, Path=Position.TotalMilliseconds} - я не могу поставить TotalMilliseconds, потому что это не так. не работает с TotalMilliseconds только для чтения... Можете ли вы объяснить мне, что я должен делать? - person user1524578; 04.08.2012
comment
И если я установил Minimum=0 Maximum={Binding ElementName=mediaElement, Path=mediaElement.NaturalDuration.TimeSpan} Value={Binding ElementName=mediaElement, Path=Position, Mode=TwoWay} - это не сработало(( - person user1524578; 04.08.2012
comment
Извините, что поставил неправильный вопрос. Я хочу, чтобы Thumb of Slider также изменил свою позицию, когда воспроизводится mediaElement. - person user1524578; 04.08.2012
comment
OK. Но теперь, поскольку вы не хотите использовать таймеры, как бы вы это сделали? возможно, используя событие LayoutUpdated для обновления слайдера... может быть подходит для фильмов, но не для музыки... Но, кстати, почему бы не использовать таймер? например 5 раз в секунду это не замедлит работу приложения... - person GameAlchemist; 04.08.2012
comment
Я делаю это на своем ноутбуке, это хорошо, но батарея не работает, а иногда игра работает плохо. Как вы думаете, это произошло из-за того, что батарея не работает? - person user1524578; 04.08.2012