单击鼠标时不会调用 PreviewMouseLeftButtonUp 事件
PreviewMouseLeftButtonUp event doesn't get called when mouse clicked
我有一个列表视图,我在其中显示对象及其状态和名称。状态被一个按钮包围,当我点击它时,状态从活动变为非活动或相反。
现在我想在按下鼠标按钮时更改状态,并在鼠标按钮上升时将其更改回来。正如您在下面的代码中看到的,我的按钮必须事件 "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 中执行。
在我的例子中,另一个控件使用了 mouseup 事件。所以我在最顶层 windows.
的级别上捕获了 mouseup 事件
我有一个列表视图,我在其中显示对象及其状态和名称。状态被一个按钮包围,当我点击它时,状态从活动变为非活动或相反。 现在我想在按下鼠标按钮时更改状态,并在鼠标按钮上升时将其更改回来。正如您在下面的代码中看到的,我的按钮必须事件 "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 中执行。
在我的例子中,另一个控件使用了 mouseup 事件。所以我在最顶层 windows.
的级别上捕获了 mouseup 事件