仅当用户更改值时发生的WPF滑块事件。

6
我正在制作一个音乐播放器,需要创建一个进度条。在WinForms中,我使用TrackBar这种方式已经完成了它:
  • 使用Timer来保持媒体位置和TrackBar值的同步。
  • 使用Scroll事件,在用户拖动TrackBar的滑块时更改媒体位置。
但是在WPF中,没有Scroll事件,而ValueChanged事件即使在代码中更改值时也会触发。因此,当我使用DispatcherTimer更新滑块位置时,ValueChanged事件仍然被触发,从而改变媒体位置。结果,媒体不能正常播放。
因此,我需要一个仅在用户更改Slider值时才触发的事件。
我已经看过这个问题,但它没有一个合适的答案。
非常感谢您的帮助。
2个回答

1
在您的 ValueChanged 事件处理程序中,检查一些属性以查看用户交互。
IsFocused, IsMouseDirectlyOver, IsMouseOver, IsKeyboardFocused, IsKeyboardFocusWithin 

谢谢你的想法。我通过使用DragStarted和DragCompleted事件解决了它。你的答案帮助我找到了解决方案。 - Fᴀʀʜᴀɴ Aɴᴀᴍ

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
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接