【问题标题】:WPF: Figuring out whether a MouseBinding is a single click or double clickWPF:确定 MouseBinding 是单击还是双击
【发布时间】:2015-07-04 21:09:16
【问题描述】:

在我看来,我正在使用 Mousebindings 来监听用户的点击,如下所示:

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

我一次只需要一个鼠标手势。因此,如果我双击我的应用程序,我想忽略单击鼠标左键。可能就像在最初的鼠标点击后等待 1-2 秒然后决定应该调用哪个。有没有一种简单的方法可以做到这一点?

【问题讨论】:

  • 没有简单的方法

标签: c# wpf mouseevent


【解决方案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");
    }
    

【讨论】:

    猜你喜欢
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2014-05-23
    • 1970-01-01
    • 2011-12-25
    相关资源
    最近更新 更多