2013-08-28 4 views
1

У меня есть mediaElement и slider.
Максимальное значение ползунка - продолжительность видео в секундах (например, если видеоролик составляет 2 минуты, значение ползунка равно 120).Обновление mediaElement на основе значения ползунка

Я хочу обновить mediaElement.Position на основе значения ползунка, но проблемы в том, что я не хочу обновлять позицию до тех пор, пока пользователь FINISHED не манипулирует значением.

так, что я сделал это 2 функции:

private void DurationSlider_ManipulationCompleted(object sender, ManipulationCompletedRoutedEventArgs e) 
{ 
    SeekToMediaPosition(); 
} 

эту функцию, если в своей работе применяет пользователь перестал манипулировать бегунок.

private void DurationSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) 
{ 
    SeekToMediaPosition(); 
} 

Эта функция применяется, если пользователь нажал на другое значение в слайдере.

Проблема в том, что они столкнулись.
Манипулирование ползунок вызвать значение, которое будет изменено ...

так, что я добавляется эту функцию:

bool manipulating = false; 
private void DurationSlider_ManipulationStarted(object sender, ManipulationStartedRoutedEventArgs e) 
{ 
    manipulating = true; 
} 

и в функции ValueChanged я проверил ли manipulating = true или нет
решаемой Это половина проблемы - он не меняет положение видео во время манипуляции (пока я не закончу), но если я нажму на другое положение на слайдере (не отпуская мышь) и продолжаю манипулировать значением ползунка - он изменяет положение видео в том месте, где я щелкнул на ползунке, а затем снова изменится на то, где я закончил манипуляцию.

И что не так?
Я хочу изменить положение видео ТОЛЬКО, когда пользователь выпустил мышь. я не могу найти событие, которое срабатывает то, что я хочу ...

+0

Вы пробовали 'ManipulationCompleted' /' PointerPressed'/'PointerReleased' событие' Slider'? – Xyroid

ответ

1

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

<Slider PointerCaptureLost=="Slider_PointerCaptureLost" 
     Height="27" Margin="132,162,0,0" VerticalAlignment="Top" Width="303"/> 

Тогда в коде позади.

private void Slider_PointerCaptureLost(object sender, DragCompletedEventArgs e) 
    { 
     Slider s = sender as Slider; 
     // Your code 
     MessageBox.Show(s.Value.ToString()); 
    } 
+0

1. В приложении Windows Store такого события нет. 2. ManipulatingCompleted эквивалентен, и поэтому проблема остается прежней. – Ron

+0

@Ron Извините, я отредактировал свой ответ. Эта работа для вас? – Naren

+1

Да, это исправляет проблему. Я могу отказаться от трех функций и использовать только один, чтобы достичь того, что мне нужно. Спасибо. – Ron

Смежные вопросы