2015-07-02 5 views
2

Im используя Mousebindings на мой взгляд, чтобы слушать клики, как это:WPF: выясняя MouseBinding, является ли один щелчок или двойной щелчок

<Path.InputBindings> 
      <MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleLeftClickProj}" /> 
      <MouseBinding Gesture="LeftClick" Command="{Binding SingleLeftClick}"/> 
</Path.InputBindings> 

мне нужен только один из жестов мыши в то время. Поэтому, если я дважды нажимаю на свое приложение, я хочу игнорировать одиночный щелчок мыши. Возможно, как и ждать 1-2 секунды после первоначального mouseclick, тогда решил, что следует назвать. Есть ли простой способ сделать это?

+0

Отсутствует простой способ – Versatile

ответ

1

Я получил его работу следующим образом (я использовал кнопку, чтобы проверить ее, вам придется ее адаптировать).

  1. Использование обработчиков событий

    <Button MouseDoubleClick="Button_MouseDoubleClick" Click="Button_Click"></Button> 
    
  2. Хранить DataContext в статической переменной

    private static object context; 
    public MainWindow() 
    { 
        InitializeComponent(); 
        DataContext = new ViewModel(); 
        context = DataContext; 
    } 
    
  3. Адаптировать этот код (я в основном получил его от https://stackoverflow.com/a/971676/4792869)

    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"); 
    } 
    
Смежные вопросы