オブジェクトの状態と名前を表示するリストビューがあります。状態はボタンで囲まれており、ボタンをクリックすると、状態がアクティブから非アクティブに、またはその逆に変化します。ここで、マウスボタンを下にクリックしたときの状態を変更し、マウスボタンを上にしたときに元に戻したいと思います。以下のコードでわかるように、私のボタンは「PreviewMouseLeftButtonDown」と「PreviewMouseLeftButtonUp」をイベントする必要があります。SendStateMessage()メソッドでは、状態がSCADAサーバーに送信され、サーバーが新しい状態を返送し、GUIが変更を編集します。
通常は問題ありませんが、クリックして高速化しても「PreviewMouseLeftButtonUp」イベントは呼び出されません。そのため、「MouseUp」はコンソルには表示されません。
最初のmouseDownイベントでTask.Delay()を呼び出そうとしました。これは、メソッドにもう少し時間が必要だと思ったのですが、これはうまく機能しませんでした。だから私は誰かが問題が何であるか、そしてこの問題をどのように修正することができるかについての考えを持っているかどうかあなたに尋ねたいと思います。
御時間ありがとうございます。
private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
//_CurrentItem is an object of the class VM on which the click is executed.
_CurrentItem = sender as FrameworkElement).DataContext as VM
_CurrentItem.SendStateMessage();
}
private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Console.WriteLine("MouseUp");
}
編集:
少し時間が経った後、私は問題を解決するための別のアイデアを思いつきました。それも機能しています。私はMouseDownEventを待つだけで、これがトリガーされた場合、マウスが押されている限り待機するループがあります。マウスを離すと、ループを離れることができ、MouseUPEventに実行したいコードを挿入します。 。
MouseDownEventを待つこともできます。これがトリガーされた場合は、マウスが押されている間待つループを作成します。マウスを離すと、ループを離れて、MouseUpEventで実行したいコードを挿入できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加