我有一个listview,在其中我显示具有状态和名称的对象。状态被一个按钮包围,当我点击它时状态从活动状态变为非活动状态或反之亦然。 现在我想在单击鼠标按钮时更改状态,并在鼠标按钮上升时将其更改回来。我的按钮必须是事件" PreviewMouseLeftButtonDown"和" PreviewMouseLeftButtonUp"正如您在下面的代码中看到的那样。在SendStateMessage()方法中,状态被发送到SCADA-Server,服务器向我发送新状态,GUI编辑更改。
通常情况下它没有任何问题,但是当我点击加快" 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 :(得分:0)
你也可以等待MouseDownEvent,如果这被触发,只要按下鼠标就会等待一个循环,当鼠标被释放时你可以离开循环并插入你想要做的代码。 MouseUpEvent。
答案 1 :(得分:0)
在我的情况下,另一个控件消耗了mouseup事件。因此,我在最顶部的窗口上捕获了mouseup事件。