【问题标题】:Click Event should not trigger when hold event perform保持事件执行时不应触发单击事件
【发布时间】:2017-04-25 18:27:27
【问题描述】:

我的 windows phone silverlight 8.1 应用程序中有按钮 我创建了两个事件一次单击事件和第二次保持事件,我希望当用户按住这样的按钮然后单击事件不应该触发, 但是目前当我按住按钮然后离开该按钮时,单击按钮也会触发,所以如何处理。

 private void ExtraButton_Click(object sender, RoutedEventArgs e)
 {

 }

 private void ExtraButton_Hold(object sender, GestureEventArgs e)
 {

 }

那么当hold事件执行时如何取消点击事件。

【问题讨论】:

  • 我已经尝试创建两个按钮(使用堆栈面板和折叠可见性和以编程方式可见的第一个按钮上的第二个按钮)但两个事件仍然触发,也尝试鼠标输入但两个事件仍然触发

标签: c# windows-phone-8.1 windows-phone-silverlight


【解决方案1】:

我建议你可以将 Button Click 事件替换为 Button Tap 事件,因为当你按住这个按钮时,Button Hold 事件会首先被触发。

        private void button1_Hold(object sender, System.Windows.Input.GestureEventArgs e)
    {
        e.Handled = true;  
        MessageBox.Show("button have been holded");

    }

    private void button1_Tap(object sender, System.Windows.Input.GestureEventArgs e)
    {
        MessageBox.Show("button have been tapped");
        //your code goes here
    }

将 Handled 属性设置为 true 后,Button Click 事件将不会处理您的手势。

【讨论】:

  • 太棒了 :) 谢谢,现在我用水龙头替换 click vent ... 谢谢..:)
【解决方案2】:

您可以通过在按住时取消连接按钮单击事件并在 PointerExited 事件中再次连接单击事件来实现您的要求。参考下面的代码sn-p。

Button btn = new Button();

btn.Holding += Btn_Holding;

btn.Click += Btn_Click;

btn.PointerExited += Btn_PointerExited;


        private void Btn_PointerExited(object sender, PointerRoutedEventArgs e)
        {
            btn.Click += Btn_Click;
        }

        private void Btn_Click(object sender, RoutedEventArgs e)
        {

        }

        private void Btn_Holding(object sender, HoldingRoutedEventArgs e)
        {
            btn.Click -= Btn_Click;
        }

在 PointerExited 事件中,只有在使用某些条件尚未挂钩时,才可以挂钩单击事件。它将提高性能。

【讨论】:

  • 谢谢'我明天会尝试,如果有效,我一定会将您的答案标记为已回答。顺便说一句,你能回答另一个问题吗,stackoverflow.com/questions/40845803/…
  • 不起作用,因为当我离开按钮点击事件触发手指时.. :(
  • 这个解决方案实际上看起来很实用,它真的不适用于您的情况吗?您能否使用Debug.WriteLine 查看触发了哪些事件以及何时触发?
  • 是的,但我使用了许多技巧,使用堆栈面板在第一个按钮上方创建按钮,并在按住第一个按钮和鼠标进入第二个按钮时折叠第一个按钮,并且还使用启用 = true/false;例如,在保持事件中禁用单击事件,但在鼠标离开事件时我需要再次启用它,但在鼠标离开事件时触发,
  • 我不明白如何在鼠标离开时触发单击事件,因为这实际上是按钮的内置行为,如果您将指针移离它们,它们不会触发单击。我将尝试在 UWP 中重新创建它并回复您
【解决方案3】:

使用 Button_Hold 和 Button_Tap 事件来实现您的要求。

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多