执行 hold 事件时不应触发 Click 事件

Click Event should not trigger when hold event perform

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

 private void ExtraButton_Click(object sender, RoutedEventArgs e)
 {

 }

 private void ExtraButton_Hold(object sender, GestureEventArgs e)
 {

 }

那么hold事件执行时如何取消click事件

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

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 事件中,您可以仅在使用某些条件尚未挂钩的情况下挂钩点击事件。它将提高性能。

我建议您可以将 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 事件将不会处理您的手势。

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