UWP开发大坑之---路由事件

Posted on By 李继龙

前言

最近在重写歌词编辑器。。。

大坑

我需要在播放进度条被按下和弹起时触发一个我自己写的事件

<Slider PointerPressed="Slider_PointerPressed" PointerReleased="Slider_PointerReleased" />
private void Slider_PointerPressed(object sender, PointerRoutedEventArgs e)
{
    UserChangeTime?.Invoke(this, EventArgs.Empty);
}

private void Slider_PointerReleased(object sender, PointerRoutedEventArgs e)
{
    UserChangeTime?.Invoke(this, EventArgs.Empty);
}

结果Run了之后,发现只有右键才能触发这按下和弹起的事件,对左键根本没反应
于是我就Google去了。。。Google到这个帖子

http://stackoverflow.com/questions/14767020/pointerpressed-not-working-on-left-click

解决方法

TMD,原来是微软构建控件时设置了 e.Handled = true;
解决方法上面的帖子已经说了,在后台订阅这些路由事件

Position_Slider.AddHandler(PointerPressedEvent, new PointerEventHandler((s, e) => UserChangeTime?.Invoke(this, EventArgs.Empty)), true);

Position_Slider.AddHandler(PointerReleasedEvent, new PointerEventHandler((s, e) => UserChangeTime?.Invoke(this, EventArgs.Empty)), true);

各参数解释

  • 第一个参数,路由事件对象
  • 第二个参数,处理器(委托)
  • 很关键)第三个参数,用来指示标记为已处理后是否仍要执行的

把上面两段代码加到构造函数里面,OK Run一下
Very Good! 完美解决