执行保持事件时,单击事件不应触发

我在我的Windows手机Silverlight 8.1应用程序中有按钮我创建了两个事件一个单击事件和第二个保持事件,我想当用户按住这样的按钮然后点击事件不应该触发,但目前当我按住按钮然后离开该按钮单击按钮也火,所以如何处理。

private void ExtraButton_Click(object sender, RoutedEventArgs e) { } private void ExtraButton_Hold(object sender, GestureEventArgs e) { } 

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

我建议您可以用Button Tap事件替换Button Click事件,因为当您按住此按钮时,将首先触发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事件将无法处理您的手势。

您可以通过在按住点击事件的同时取消按钮点击事件来实现您的要求,并再次在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事件中,只有在使用某些条件尚未挂钩时才能挂钩click事件。 它将改善性能。

使用Button_Hold和Button_Tap事件来满足您的要求。