执行 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 事件来实现您的要求。
我的 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 事件来实现您的要求。