Я могу поймать одиночное нажатие на 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 и дифференцируюсь между двумя?
Вам нужно устрелить событие после окончания последовательности клики ... когда это? Я предлагаю использовать таймер. Событие 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;
}
Ура!
Если вам нужно обнаружить разницу, я предлагаю вам использовать управление, такое как метку
, которая делает работу для вас:
label.MouseDown += delegate(object sender, MouseEventArgs e)
{
if (e.ClickCount == 1)
{
// single click
}
};
label.MouseDoubleClick += delegate
{
// double click
};
редактировать: мой совет Следуют из документации на MSDN:
класс управления определяет PreviewMousedoubleclick и Mousedoubleclick события, но не Соответствующие одноликные события. К посмотрите, нажал ли пользователь контроль один раз, обрабатывайте Mousedown событие (или один из его коллег) и Проверьте, является ли свойство ClickCount Значение 1.
Тем не менее, это даст вам уведомление об одном клике, даже если пользователь один кликов.