WPF:确定 MouseBinding 是单击还是双击
WPF: Figuring out whether a MouseBinding is a single click or double click
我在我的视图中使用鼠标绑定来监听用户点击,如下所示:
<Path.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleLeftClickProj}" />
<MouseBinding Gesture="LeftClick" Command="{Binding SingleLeftClick}"/>
</Path.InputBindings>
我一次只需要一个鼠标手势。因此,如果我双击我的应用程序,我想忽略单击鼠标左键的绑定。可能就像在初始鼠标点击后等待 1-2 秒,然后决定应该调用哪个。有没有简单的方法可以做到这一点?
我按以下方式让它工作(我用一个按钮来测试它,你必须适应它)。
使用事件处理程序
<Button MouseDoubleClick="Button_MouseDoubleClick" Click="Button_Click"></Button>
将 DataContext 存储在静态变量中
private static object context;
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
context = DataContext;
}
改编这段代码(我主要是从那里得到的)
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();
((ICommand)DataContext).Execute("DoubleLeftClickProj");
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
((ICommand)context).Execute("SingleLeftClick");
}
我在我的视图中使用鼠标绑定来监听用户点击,如下所示:
<Path.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleLeftClickProj}" />
<MouseBinding Gesture="LeftClick" Command="{Binding SingleLeftClick}"/>
</Path.InputBindings>
我一次只需要一个鼠标手势。因此,如果我双击我的应用程序,我想忽略单击鼠标左键的绑定。可能就像在初始鼠标点击后等待 1-2 秒,然后决定应该调用哪个。有没有简单的方法可以做到这一点?
我按以下方式让它工作(我用一个按钮来测试它,你必须适应它)。
使用事件处理程序
<Button MouseDoubleClick="Button_MouseDoubleClick" Click="Button_Click"></Button>
将 DataContext 存储在静态变量中
private static object context; public MainWindow() { InitializeComponent(); DataContext = new ViewModel(); context = DataContext; }
改编这段代码(我主要是从那里得到的)
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(); ((ICommand)DataContext).Execute("DoubleLeftClickProj"); 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 ((ICommand)context).Execute("SingleLeftClick"); }