WPF Slider事件仅在用户

时间:2015-12-27 11:47:58

标签: c# wpf slider media-player seekbar

我正在制作一个音乐播放器,我需要创建一个搜索。现在我已经通过这种方式使用TrackBar在WinForms中完成了它:

  • 使用计时器保持媒体的位置和TrackBar的值同步。
  • 当用户拖动TrackBar的拇指时,使用Scroll事件更改媒体位置。

但是在WPF中,没有Scroll事件,即使在代码中更改了值,ValueChanged事件也会触发。因此,当我使用DispatcherTimer更新滑块位置时,即使这样,也会触发ValueChanged事件,从而更改媒体位置。因此,媒体无法正常播放。

所以我需要一个仅在用户更改Slider的值时触发的事件。

我已经遇到this question,但它没有正确答案。

任何帮助将不胜感激。感谢您的期待。

2 个答案:

答案 0 :(得分:1)

ValueChanged事件处理程序中,检查一些属性以查看用户交互。

IsFocused, IsMouseDirectlyOver, IsMouseOver, IsKeyboardFocused, IsKeyboardFocusWithin 

答案 1 :(得分:0)

您可以这样做:首先,定义一个类变量:

private double newValue = 0;

然后,每当您想要更改代码中滑块的值时,首先存储新值:

newValue = <<whatever you need>>;
slider1.Value = newValue;

然后在您的事件处理程序中包含以下检查:

private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
{
    if (e.NewValue != newValue)
    {
       newValue = e.NewValue;
       // DO SOMETHING
    }
}