Как я могу поймать и одиночное нажатие и дважды щелкнуть по событиям на WPF FrameworkElement?

Я могу поймать одиночное нажатие на TextBlock как это:

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

Я могу поймать дважды щелкание на TextBlock как это:

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

Но как я ловлю их обоих на единственном TextBlock и дифференцируюсь между двумя?

20
задан Edward Tanguay 18 January 2010 в 13:16
поделиться

2 ответа

Вам нужно устрелить событие после окончания последовательности клики ... когда это? Я предлагаю использовать таймер. Событие Mousedown будет сбросить его и увеличить счетчик Click. Когда интервал таймера истекает, он делает вызов для оценки количества кликов.

    private System.Timers.Timer ClickTimer;
    private int ClickCounter;

    public MyView()
    {
        ClickTimer = new Timer(300);
        ClickTimer.Elapsed += new ElapsedEventHandler(EvaluateClicks);
        InitializeComponent();
    }

    private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
    {
        ClickTimer.Stop();
        ClickCounter++;
        ClickTimer.Start();
    }

    private void EvaluateClicks(object source, ElapsedEventArgs e)
    {
        ClickTimer.Stop();
        // Evaluate ClickCounter here
        ClickCounter = 0;
    }

Ура!

12
ответ дан 30 November 2019 в 01:08
поделиться

Если вам нужно обнаружить разницу, я предлагаю вам использовать управление, такое как метку , которая делает работу для вас:

label.MouseDown += delegate(object sender, MouseEventArgs e)
{
    if (e.ClickCount == 1)
    {
        // single click
    }
};

label.MouseDoubleClick += delegate
{
    // double click
};

редактировать: мой совет Следуют из документации на MSDN:

класс управления определяет PreviewMousedoubleclick и Mousedoubleclick события, но не Соответствующие одноликные события. К посмотрите, нажал ли пользователь контроль один раз, обрабатывайте Mousedown событие (или один из его коллег) и Проверьте, является ли свойство ClickCount Значение 1.

Тем не менее, это даст вам уведомление об одном клике, даже если пользователь один кликов.

3
ответ дан 30 November 2019 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: