none
请问怎样在uwp中将控件添加鼠标左键的Holding事件? RRS feed

  • 问题

  • 我用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
    2016年8月16日 15:56

答案

  • ?????

    • 已标记为答案 AlfredNG 2016年8月17日 14:34
    • 已编辑 [-] 2018年1月11日 12:45
    2016年8月17日 9:13
  • 谢谢你回答,原来要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
    2016年8月17日 14:26

全部回复

  • 有人知道吗?
    2016年8月17日 8:53
  • ?????

    • 已标记为答案 AlfredNG 2016年8月17日 14:34
    • 已编辑 [-] 2018年1月11日 12:45
    2016年8月17日 9:13
  • 但是我只需要Holding这个动作喔
    2016年8月17日 9:26
  • 还是不是很明白,能详细一点吗?
    2016年8月17日 12:59
  • 请问有没有具体的例子?
    2016年8月17日 13:31
  • 谢谢你回答,原来要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
    2016年8月17日 14:26