我想控制用鼠标单击时用户是单击还是双击。所以我使用这段代码:
private void MouseSingleClickCommand(RoutedEventArgs e)
{
_dtMouseClick.Start();
}
private void MouseClick_Tick(object sender, System.EventArgs e)
{
_dtMouseClick.Stop();
//my one click code
}
private void MouseDoubleClickCommand(MouseButtonEventArgs e)
{
_dtMouseClick.Stop();
//code of the double click
}
_dt是在视图模型的构造函数中创建的DispatcherTimer:
_dtMouseClick =
new System.Windows.Threading.DispatcherTimer(
new TimeSpan(0, 0, 0, 0, 200),
System.Windows.Threading.DispatcherPriority.Background,
MouseClick_Tick,
System.Windows.Threading.Dispatcher.CurrentDispatcher);
但是,一键执行的代码始终会执行,因为调度程序不会停止。
为什么?。
谢谢。
编辑:我包括按钮的axml:
<StackPanel Height="Auto" HorizontalAlignment="Left" Margin="548,0,0,0" Name="stpBotnoesBasicos" VerticalAlignment="Top" Width="Auto">
<Button Content="Buscar" Height="23" Name="btn01" Width="75">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding MouseSingleClickCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
<i:EventTrigger EventName="MouseDoubleClick">
<cmd:EventToCommand Command="{Binding MouseDoubleClickCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Stackpannel>
此解决方案基于另一个问题的解决方案:
如果我使用PreviewMouseLeftButtonDown来控制单击或双击的工作时间,而不是使用两个事件(单击和双击)。
所以我用下面的代码解决了这个问题:
第一种方法用鼠标控制点击。
private void MouseLeftButtonDownCommand(MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
_dtMouseClick.Start();
}
else if(e.ClickCount > 1)
{
_dtMouseClick.Stop();
//the code of the double click
}
}
此方法是链接到DispatcherTimer的方法,如果没有在第二次单击鼠标时停止,则执行该方法。
private void MouseClick_Tick(object sender, System.EventArgs e)
{
_dtrMouseClick.Stop();
//code of the single click
}
dispatcherTimer是在视图模型的构造函数中创建的
_dtBotonBuscarMouseClick =
new System.Windows.Threading.DispatcherTimer(
new TimeSpan(0, 0, 0, 0, 250),
System.Windows.Threading.DispatcherPriority.Background,
MouseClick_Tick,
System.Windows.Threading.Dispatcher.CurrentDispatcher);
_dtMouseClick.Stop();
间隔为250毫秒,即用户必须双击的时间间隔。
在此解决方案中,我使用相同的方法来停止dispatcherTimer的stop()方法,但是由于某些原因,如果我使用两个事件(click和mouseDoubleClick),双击中的dispatcherTimer不会停止,并且如果我使用MouseLeftButtonDown解决方案有效的情况下。
编辑
对我来说,这种解决方案可以正常工作。
在MouseLeftButtonDown事件中,我检查ClickCount是1还是2。如果计数是1,则启动计时器。因此,如果之前没有停止,则计时器将执行其代码。
如果第二次单击是双击,计时器将停止。这是ClickCounter> 1的时间。如果单击之间的间隔时间足够长,则clickcounter始终为1,因此,此事件MouseLeftButtonDown控制何时双击。
当执行计时器时,首先我要停止它,因为我想执行一次它的代码,而我想要的代码只需单击一下即可。
如果我双击,那么我会在达到间隔之前停止计时器,因此永远不会执行,并双击执行我想要的代码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句