根据滑块值更新mediaElement
本文关键字:更新 mediaElement | 更新日期: 2023-09-27 18:29:12
我有一个mediaElement
和slider
滑块的最大值是以秒为单位的视频持续时间(例如,如果视频为2分钟,则滑块的值为120)。
我想根据滑块的值更新mediaElement.Position,但问题是我不想更新位置,直到用户完成对值的操作。
所以我做的是两个功能:
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
是否
它解决了一半的问题-它在操作时不会更改视频位置(直到我完成),但如果我单击滑块上的不同位置(不释放鼠标)并继续操作滑块的值-它会将视频位置更改为我单击滑块的位置,然后再次更改为我结束操作的位置。
那怎么了
我只想在用户释放鼠标时更改视频位置。我找不到能激发我想要的东西的事件。。。
您可以使用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());
}