C# 执行保持事件时不应触发单击事件
我的windows phone silverlight 8.1应用程序中有一个按钮 我创建了两个事件一个点击事件和第二个保持事件,我想当用户按住这样的按钮时,点击事件应该不会触发, 但目前当我按住按钮,然后离开那个按钮时,点击按钮也会触发,那个么如何处理呢C# 执行保持事件时不应触发单击事件,c#,windows-phone-8.1,windows-phone-silverlight,C#,Windows Phone 8.1,Windows Phone Silverlight,我的windows phone silverlight 8.1应用程序中有一个按钮 我创建了两个事件一个点击事件和第二个保持事件,我想当用户按住这样的按钮时,点击事件应该不会触发, 但目前当我按住按钮,然后离开那个按钮时,点击按钮也会触发,那个么如何处理呢 private void ExtraButton_Click(object sender, RoutedEventArgs e) { } private void ExtraButton_Hold(object sender, G
private void ExtraButton_Click(object sender, RoutedEventArgs e)
{
}
private void ExtraButton_Hold(object sender, GestureEventArgs e)
{
}
因此,如何在执行保持事件时取消单击事件。您可以通过在保持时解除按钮单击事件的锁定,然后在PointerExit事件中再次连接单击事件来实现您的要求。请参阅下面的代码片段
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事件尚未使用某些条件钩住时,才可以钩住它。它将提高性能。您可以通过在按住按钮的同时解除按钮单击事件的锁定,然后在PointerExit事件中再次连接单击事件来实现您的要求。请参阅下面的代码片段
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事件尚未使用某些条件钩住时,才可以钩住它。这将提高性能。我建议您可以将按钮点击事件替换为按钮点击事件,因为当您按住此按钮时,将首先触发按钮保持事件
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 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事件来实现您的要求。使用Button_-Hold和Button_-Tap事件来实现您的要求。谢谢“我明天会尝试,如果成功,我一定会将您的答案标记为已回答。”。顺便问一下,你能回答另一个问题吗?这不起作用,因为当我把手指从按钮上移开时,点击事件会触发(这个解决方案实际上似乎很实用,在您的情况下它真的不起作用吗?您可以使用
Debug.WriteLine
查看触发哪些事件以及何时触发?是的,但我使用了许多技巧使用堆栈面板在第一个按钮上方创建按钮,按住第一个按钮时折叠第一个按钮,在第二个按钮上单击第一个按钮和鼠标,并使用is enabled=true/false;例如,对于保留事件,使单击事件禁用,但在鼠标离开事件时,我需要再次启用它,但在鼠标离开事件时,我不理解单击事件如何在鼠标离开时触发,因为这实际上是按钮的内置行为,如果将指针移离按钮,它们不会触发单击。我将尝试在UWP中重新创建此选项,然后返回youThanks'我明天会尝试,如果成功,我肯定会将您的答案标记为已回答。顺便问一下,您能否回答另一个问题,这不成功,因为当我离开按钮点击事件激发的手指时..:(这个解决方案实际上似乎很实用,在您的情况下它真的不起作用吗?您可以使用Debug.WriteLine
查看触发哪些事件以及何时触发?是的,但我使用了许多技巧使用堆栈面板在第一个按钮上方创建按钮,按住第一个按钮时折叠第一个按钮,在第二个按钮上单击第一个按钮和鼠标,并使用is enabled=true/false;例如,对于保留事件,使单击事件禁用,但在鼠标离开事件时,我需要再次启用它,但在鼠标离开事件时,我不理解单击事件如何在鼠标离开时触发,因为这实际上是按钮的内置行为,如果将指针移离按钮,它们不会触发单击。我将尝试在UWP中重新创建此按钮,然后返回给您我已经尝试创建两个按钮(使用堆栈面板在第一个按钮上创建第二个按钮,并以编程方式折叠可见性和可见),但两个事件仍会启动,也尝试鼠标输入,但两个事件仍会启动我已经尝试创建两个按钮(第二个按钮位于第一个按钮上方,使用堆栈面板并以编程方式折叠可见性和可视性)但两个事件仍会启动,也请尝试鼠标输入但两个事件仍会启动创建:)它工作正常谢谢,现在我将“点击通风”替换为“点击通风”…谢谢:)太好了:)它工作正常谢谢,现在我将“点击通风”替换为“点击通风”…谢谢:)