2015-07-03 55 views
0

我有一個列表視圖,其中顯示對象的狀態和名稱。狀態被一個按鈕包圍,當我點擊它時,狀態從活動變爲不活動或相反。 現在我想改變狀態,當我點擊鼠標按鈕並在鼠標按鈕上升時將其改回。我的按鈕必須事件「PreviewMouseLeftButtonDown」和「PreviewMouseLeftButtonUp」,您可以在下面的代碼中看到。在SendStateMessage()方法中,狀態被髮送到SCADA服務器,並且服務器向我發回新狀態,GUI將編輯更改。PreviewMouseLeftButtonUp事件不會被鼠標點擊時調用

通常它不會產生任何問題,但是當我點擊以加快「PreviewMouseLeftButtonUp」事件不會被調用時。因此,「MouseUp」沒有在CONSOL中顯示。

我試圖在第一個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中執行的代碼。

+0

Quacks就像一個雙擊問題,你的代碼段對診斷問題沒有幫助。 –

+0

謝謝你的快速回答,但它不是雙擊問題。你可以用不同的方式點擊,或者你點擊鼠標按鈕並按住它,或者你也可以非常快地點擊它,並且在那裏我遇到了問題。正如我所說,我認爲服務器需要很長時間,所以事件不會被觸發。但我找不到解決辦法。 –

+0

在我的代碼片段中:在「SendStateMessage()」方法中,如果狀態處於活動狀態或不是如下行代碼, -Tool「,ModuleUid,Enums.UserModuleCommands.Off)); –

回答

0

您還可以等待MouseDownEvent,如果觸發了這個循環,只要按下鼠標就可以建立一個循環,當鼠標被釋放時,您可以離開循環並在其中插入您想要執行的代碼在MouseUpEvent中。