Событие щелчка не должно срабатывать при выполнении события удержания

У меня есть кнопка в приложении Silverlight 8.1 для Windows Phone. Я создал два события: одно событие щелчка и второе событие удержания, я хочу, чтобы когда пользователь удерживал такую ​​кнопку, тогда событие щелчка не должно срабатывать, но в настоящее время, когда я удерживаю кнопку, а затем оставляю эту кнопку, также нажмите кнопку пожары, так как справиться с этим.

 private void ExtraButton_Click(object sender, RoutedEventArgs e)
 {

 }

 private void ExtraButton_Hold(object sender, GestureEventArgs e)
 {

 }

Итак, как отменить событие щелчка при выполнении события удержания.


person Shubham Sahu    schedule 10.12.2016    source источник
comment
я уже пытаюсь создать две кнопки (2-я кнопка над 1-й кнопкой, используя панель стека и свернутую видимость и видимость программно), но оба события все еще срабатывают, также попробуйте ввести мышь, но оба события все еще срабатывают   -  person Shubham Sahu    schedule 13.12.2016


Ответы (3)


Я предлагаю вам заменить событие 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 не будет обрабатывать ваш жест.

person Cherry Bu - MSFT    schedule 16.12.2016
comment
Отлично :) все работает, спасибо, теперь я заменяю щелчок вентиля краном ... спасибо .. :) - person Shubham Sahu; 16.12.2016

Вы можете выполнить свое требование, отключив событие нажатия кнопки, удерживая его, и снова подключите событие щелчка в событии 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 вы можете перехватить событие щелчка, только если оно еще не перехвачено с использованием некоторых условий. Это улучшит производительность.

person Divakar    schedule 10.12.2016
comment
Спасибо, я попробую завтра, и если получится, я обязательно отмечу ваш ответ как отвеченный. И, кстати, можете ли вы ответить на другой вопрос, stackoverflow.com/questions/40845803/ - person Shubham Sahu; 10.12.2016
comment
это не работает, потому что, когда я оставляю палец после нажатия кнопки, срабатывает событие.. :( - person Shubham Sahu; 11.12.2016
comment
Это решение на самом деле кажется вполне функциональным, неужели оно не работает в вашем случае? Не могли бы вы использовать Debug.WriteLine, чтобы увидеть, какие события запускаются и когда? - person Martin Zikmund; 12.12.2016
comment
да, но я использовал много трюков, создаю кнопку над первой кнопкой, используя панель стека, и сворачиваю первую кнопку, когда удерживаю и первую кнопку и мышь нажимаю на вторую кнопку, а также использую enable = true/false; например, при удержании события отключите событие щелчка, но при событии выхода из мыши мне нужно включить его снова, но при запуске события щелчка мыши, - person Shubham Sahu; 13.12.2016
comment
Я не понимаю, как событие щелчка может срабатывать при уходе мыши, потому что на самом деле это встроенное поведение кнопок, когда они не срабатывают, если вы отводите указатель от них. Я попытаюсь воссоздать это в UWP и вернусь к вам. - person Martin Zikmund; 14.12.2016

Используйте события Button_Hold и Button_Tap для достижения ваших требований.

person Community    schedule 21.05.2017