积极答复者
请问怎样在uwp中将控件添加鼠标左键的Holding事件?

问题
-
我用UserControl新建了一个控件,想获取长按事件,我知道OnHolding只能触摸触发,查了资料,发现GestureRecognizer,但是还是没有触发代码如下
public sealed partial class MyUserControl1 : UserControl { private GestureRecognizer gr; public MyUserControl1() { this.InitializeComponent(); gr = new GestureRecognizer(); gr.GestureSettings = GestureSettings.HoldWithMouse; gr.Holding += (s, e) => { Debug.WriteLine("Holding!"); }; } }
没有打印出Holding,求解答
- 已编辑 AlfredNG 2016年8月16日 15:57
答案
-
谢谢你回答,原来要ProcessDownEvent、ProcessMoveEvents、ProcessUpEvent都加入参数才能,不过不知道为按下鼠标,一秒左右进入holding,放开鼠标也会进入多一次 holding事件,以下是代码
public MyUserControl1() { this.InitializeComponent(); ui = this; gr = new GestureRecognizer(); gr.GestureSettings = GestureSettings.HoldWithMouse; this.PointerPressed += MyUserControl1_PointerPressed; this.PointerReleased += MyUserControl1_PointerReleased; this.PointerMoved += MyUserControl1_PointerMoved; this.gr.Holding += (s, e) => { Debug.WriteLine("Hold"); }; } private void MyUserControl1_PointerMoved(object sender, PointerRoutedEventArgs e) { gr.ProcessMoveEvents(e.GetIntermediatePoints(ui)); } private void MyUserControl1_PointerReleased(object sender, PointerRoutedEventArgs e) { gr.ProcessUpEvent(e.GetCurrentPoint(ui)); } private void MyUserControl1_PointerPressed(object sender, PointerRoutedEventArgs e) { gr.ProcessDownEvent(e.GetCurrentPoint(ui)); }
- 已标记为答案 AlfredNG 2016年8月17日 14:34
全部回复
-
谢谢你回答,原来要ProcessDownEvent、ProcessMoveEvents、ProcessUpEvent都加入参数才能,不过不知道为按下鼠标,一秒左右进入holding,放开鼠标也会进入多一次 holding事件,以下是代码
public MyUserControl1() { this.InitializeComponent(); ui = this; gr = new GestureRecognizer(); gr.GestureSettings = GestureSettings.HoldWithMouse; this.PointerPressed += MyUserControl1_PointerPressed; this.PointerReleased += MyUserControl1_PointerReleased; this.PointerMoved += MyUserControl1_PointerMoved; this.gr.Holding += (s, e) => { Debug.WriteLine("Hold"); }; } private void MyUserControl1_PointerMoved(object sender, PointerRoutedEventArgs e) { gr.ProcessMoveEvents(e.GetIntermediatePoints(ui)); } private void MyUserControl1_PointerReleased(object sender, PointerRoutedEventArgs e) { gr.ProcessUpEvent(e.GetCurrentPoint(ui)); } private void MyUserControl1_PointerPressed(object sender, PointerRoutedEventArgs e) { gr.ProcessDownEvent(e.GetCurrentPoint(ui)); }
- 已标记为答案 AlfredNG 2016年8月17日 14:34