您可以這樣做的一種方法是綁定到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基本上只是一個按鈕,點擊觸發在每一個時間間隔。因此,如果我們在按鈕的PreviewMouseDown上啓動Stopwatch,則每次Click事件觸發時,我們都可以檢查秒錶上已經過的時間,並根據結果修改我們的操作。
LongClick事件不應該等到我釋放鼠標,但實際上是三秒鐘過後。但這將是一個有趣的(簡單而有效的)解決方案。要試一試。 – heltonbiker 2014-10-31 20:20:58
@heltonbiker嗯。這比RepeatButton的功能更接近按鈕。我會看看我能否拿出這樣的東西。 – furkle 2014-10-31 20:22:36
是的,我當前的小工具是repeatbuttons,因爲這是他們模擬的硬件行爲。我的問題的核心是「如何區分第一次點擊和後續點擊?」 – heltonbiker 2014-10-31 20:23:56