相关疑难解决方法(0)

如何在WPF FrameworkElement上捕获单击和双击事件?

我可以像这样在TextBlock上单击一下:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("you single-clicked");
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样双击 TextBlock:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        if (e.ClickCount == 2)
        {
            MessageBox.Show("you double-clicked");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如何在单个TextBlock上捕获它们并区分它们?

c# wpf double-click event-handling

20
推荐指数
2
解决办法
3万
查看次数

WPF:按住单击+双击问题

我必须处理单击和双击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;

    //.... …
Run Code Online (Sandbox Code Playgroud)

wpf timer mouseclick-event

15
推荐指数
2
解决办法
3万
查看次数

标签 统计

wpf ×2

c# ×1

double-click ×1

event-handling ×1

mouseclick-event ×1

timer ×1