【问题标题】:Update mediaElement based on slider value根据滑块值更新 mediaElement
【发布时间】:2013-08-28 05:33:22
【问题描述】:

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

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

【问题讨论】:

  • 你试过ManipulationCompleted/PointerPressed/PointerReleasedSlider事件吗?

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


【解决方案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());
    }

【讨论】:

  • 1. Windows 应用商店应用中没有此类事件。 2. ManipulatingCompleted 是等价的,因此问题仍然存在。
  • 是的,它确实解决了问题。我可以放弃这 3 个功能,只使用这一个来实现我所需要的。谢谢。
猜你喜欢
  • 2019-02-11
  • 1970-01-01
  • 2018-08-06
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多