次のコードを検討して、私はWPFの「オン/オフ」ボタンであるテキストブロックを持っています。これは楕円の内側にあるON/OFFのテキストです。ユーザーがボタンをクリックして1秒間左マウスを保持すると、デバイスの電源が入っていない場合は、「デバイスをオンにする」というコードが実行されます。ユーザーがON/OFFボタンを3秒以上(左マウスボタンHELDを押したままに)保っていると、デバイスはオフになります。WPF DispatcherTimerおよびマウスボタンのクリックタイミングの変更
私はボートを紛失しているいくつかの問題。 1.タイマーが開始されているにもかかわらず、マウスボタンが押されている間、ティックイベントが発生していません。 2. do/whileループは、ボタンを持ち上げても終了しません。
ありがとう!
public int TimerCount = 0;
private void ButtonPressTimer(object sender, EventArgs e)
{
TimerCount = TimerCount + 1;
}
private void txtBlockOnOff_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var buttonPressTimer = new DispatcherTimer(new TimeSpan(0, 0, 0, 1), DispatcherPriority.Normal, ButtonPressTimer, this.Dispatcher);
do
{
if (!buttonPressTimer.IsEnabled)
buttonPressTimer.Start();
}
while (e.ButtonState == MouseButtonState.Pressed);
buttonPressTimer.Stop();
if (TimerCount >= 3)
{
//do something here
}
else
{
//do something different here
}
}
ちなみに、短いプレスは1秒、長いプレスは3秒ですが、これはコードに反映されていません。オリジナルと同様に、私の例では、長いプレスは3秒以上のもので、短いプレスはそれ以下のものであると仮定しています。これを変更すると、私が投稿したコードを使用するのが簡単になります。TimeSpanと比べて、あなたが好きなだけ具体的にできるからです。 –