我必须处理 WPF 应用程序中按钮的单击和双击,并具有不同的反应。
不幸的是,在双击时,WPF 会触发两个单击事件和一个双击事件,因此很难处理这种情况。
它试图使用计时器来解决它,但没有成功......我希望你能帮助我。
我们看一下代码:
private void delayedBtnClick(object statInfo)
{
if (doubleClickTimer != null)
doubleClickTimer.Dispose();
doubleClickTimer = null;
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new VoidDelegate(delegate()
{
// ... DO THE SINGLE CLICK ACTION
}));
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (doubleClickTimer == null)
doubleClickTimer = new Timer(delayedBtnClick, null, System.Windows.Forms.SystemInformation.DoubleClickTime, Timeout.Infinite);
}
}
}
private void btnNext_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if (doubleClickTimer != null)
doubleClickTimer.Change(Timeout.Infinite, Timeout.Infinite); // disable it - I've tried it with and without this line
doubleClickTimer.Dispose();
doubleClickTimer = null;
//.... DO THE DOUBLE CLICK ACTION
}
问题在于,双击时在“双击操作”之后调用“单击操作”。奇怪的是我设置了doubleClickTimer
双击为 null 但在delayedBtnClick
这是真的:O
我已经尝试过使用更长的时间、布尔标志和锁......
你有什么想法?
Best!
如果您设置RoutedEvent
's e.Handled
to true
处理后MouseDoubleClick
事件然后它不会调用Click
事件发生后的第二次MouseDoubleClick
.
有一个最近贴文 https://stackoverflow.com/questions/970898/double-click-vs-single-click-are-these-mutually-exclusive这涉及到有不同的行为SingleClick
and DoubleClick
这可能有用。
但是,如果您确定想要单独的行为并且想要/需要阻止第一个行为Click
以及第二个Click
,您可以使用DispatcherTimer
就像你一样。
private static DispatcherTimer myClickWaitTimer =
new DispatcherTimer(
new TimeSpan(0, 0, 0, 1),
DispatcherPriority.Background,
mouseWaitTimer_Tick,
Dispatcher.CurrentDispatcher);
private void Button_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
// Stop the timer from ticking.
myClickWaitTimer.Stop();
Trace.WriteLine("Double Click");
e.Handled = true;
}
private void Button_Click(object sender, RoutedEventArgs e)
{
myClickWaitTimer.Start();
}
private static void mouseWaitTimer_Tick(object sender, EventArgs e)
{
myClickWaitTimer.Stop();
// Handle Single Click Actions
Trace.WriteLine("Single Click");
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)