查找大小调整操作中是不是按下了 Esc 键(MouseLeftButtonDown+MouseMove)
Posted
技术标签:
【中文标题】查找大小调整操作中是不是按下了 Esc 键(MouseLeftButtonDown+MouseMove)【英文标题】:Find whether Esc key is pressed in resizing operation (MouseLeftButtonDown+MouseMove)查找大小调整操作中是否按下了 Esc 键(MouseLeftButtonDown+MouseMove) 【发布时间】:2020-09-12 20:53:08 【问题描述】:在我的 WPF 应用程序中,我必须在 MouseDown
和 MouseMove
事件中查找“Esc”键是否被按下(即调整大小操作)。
我在MouseMove
事件中尝试了以下代码:
isEscapePressed = Keyboard.IsKeyDown(Key.Escape);
但isEscapePressed
为真,仅当“Esc”键仍处于保持状态时。否则为假。
我也尝试使用OnKeyDown
和OnPreviewKeyDown
事件。但是当鼠标左键处于按下状态时不会触发这些。
在我的应用程序中,我在边框内使用ContentControl
,并使用边框的MouseMove
和MouseLeftButtonDown
事件来调整大小。
<Border>
<ContentControl></ContentControl>
</Border>
请对这个案例提出任何想法。
【问题讨论】:
你不能保持一些状态吗?当按下 Escape 时,您在 KeyDown 事件中将实例布尔值设置为 true,如果释放了退出键,则在 KeyUp 中将其设置为 false。然后在您的鼠标移动事件中检查该实例布尔值是真还是假? 在按下鼠标左键的状态下按下“Esc”键时不会调用KeyDown事件。 我怀疑你在鼠标移动事件处理程序中阻塞了 UI,这就是 KeyDown 的原因。你能显示更多代码吗?见minimal reproducible example。 我已经检查过了。我没有任何 UI 阻止代码。在我的应用程序中,我在 Border 内使用 ContentControl 并使用 Border 的 MouseMove 和 MouseLeftButtonDown 事件来调整大小。也许你可以使用以下:
private bool _isEscapePressed = false;
private void MouseMoveEventHandler(object sender, System.Windows.Input.MouseEventArgs e)
if (!_isEscapePressed && Keyboard.IsKeyDown(Key.Escape))
_isEscapePressed = true;
// Code for Esc pressed down
else if (_isEscapePressed && !Keyboard.IsKeyDown(Key.Escape))
_isEscapePressed = false;
// Code for Esc released
// Mouse move code
【讨论】:
以上是关于查找大小调整操作中是不是按下了 Esc 键(MouseLeftButtonDown+MouseMove)的主要内容,如果未能解决你的问题,请参考以下文章
如何检测 Actionscript 3 中是不是按下了删除键?