RepeatButton
- это, вероятно, то, что вы ищете, оно инкапсулирует периодическое поведение, но я не знаю, есть ли способ отличить короткий щелчок от удерживающего щелчка.
Редактировать: Мне кажется, вам все еще нужно поле (ну, вы могли бы использовать Tag
) для учета состояния, например,
<RepeatButton
Click="RepeatButton_Click"
PreviewMouseLeftButtonUp="RepeatButton_MouseLeftButtonUp"
Interval="500" Delay="1000" Content="Buton" />
int _clickCount = 0;
private void RepeatButton_Click(object sender, RoutedEventArgs e)
{
if (_clickCount > 0)
{
// Repeated hold action
}
_clickCount++;
}
private void RepeatButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (_clickCount == 1)
{
// Short click action
}
_clickCount = 0;
}
(Обратите внимание, что приведенный выше код далеко не чистый, существуют проблемы с логикой щелчка, например, поскольку сброс должен происходить при наведении мыши вверх, но действие короткого щелчка следует выполнять только в том случае, если мышь все еще находится над кнопкой, так как код теперь, действие всегда будет происходить (если, конечно, будет выполнено условие if
)