根据滑块值更新mediaElement

时间:2013-08-28 05:33:22

标签: c# wpf slider windows-store-apps

我有一个mediaElement和一个slider 滑块的最大值是视频的持续时间(以秒为单位)(例如,如果视频为2分钟,则滑块的值为120)。

我想根据滑块的值更新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是否为{{1}} 它解决了一半的问题 - 它在操作时不会改变视频位置(直到我完成)但是如果我点击滑块上的不同位置(不释放鼠标)并继续操纵滑块的值 - 它会将视频位置更改为我单击滑块然后再次更改到我结束操作的位置。

那么什么不对? 我想在用户释放鼠标时更改视频位置 ONLY 。 我找不到触发我想要的事件......

1 个答案:

答案 0 :(得分: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());
    }