これを行う 1 つの方法は、MouseDown および MouseUp イベントにバインドすることです。MouseDown で開始されるストップウォッチのようなものを使用し、MouseUp で経過した時間を確認します。3 秒未満の場合は、Click() アクションを実行します。3 秒を超える場合は、LongClick() アクションを実行します。
private void Button_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
stopwatch = new Stopwatch();
stopwatch.Start();
}
private void Button_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
stopwatch.Stop();
if (stopwatch.ElapsedMilliseconds >= 3000)
{
// do Click()
}
else
{
// do LongClick
}
}
そして、これが RepeatButton の解決策です。
private bool isLongClick;
private bool hasAlreadyLongClicked;
private void RepeatButton_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
isLongClick = false;
hasAlreadyLongClicked = false;
stopwatch = new Stopwatch();
stopwatch.Start();
}
private void RepeatButton_Click(object sender, RoutedEventArgs e)
{
if (!hasAlreadyLongClicked && stopwatch.ElapsedMilliseconds >= 3000)
{
hasAlreadyLongClicked = true;
isLongClick = true;
// do your LongClick action
}
}
private void RepeatButton_PreviewMouseUp(object sender, MouseButtonEventArgs e)
{
if (!isLongClick)
{
// do short click action
}
}
ここでの秘訣は、RepeatButton は基本的に、間隔ごとに Click を起動する単なる Button であるということです。したがって、ボタンの PreviewMouseDown でストップウォッチを開始すると、Click イベントが発生するたびにストップウォッチで経過時間を確認し、結果に基づいてアクションを変更できます。