查找大小调整操作中是不是按下了 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 应用程序中,我必须在 MouseDownMouseMove 事件中查找“Esc”键是否被按下(即调整大小操作)。

我在MouseMove 事件中尝试了以下代码:

isEscapePressed = Keyboard.IsKeyDown(Key.Escape);

isEscapePressed 为真,仅当“Esc”键仍处于保持状态时。否则为假。

我也尝试使用OnKeyDownOnPreviewKeyDown 事件。但是当鼠标左键处于按下状态时不会触发这些。

在我的应用程序中,我在边框内使用ContentControl,并使用边框的MouseMoveMouseLeftButtonDown 事件来调整大小。

<Border>
   <ContentControl></ContentControl>
</Border>

请对这个案例提出任何想法。

【问题讨论】:

你不能保持一些状态吗?当按下 Escape 时,您在 KeyDown 事件中将实例布尔值设置为 true,如果释放了退出键,则在 KeyUp 中将其设置为 false。然后在您的鼠标移动事件中检查该实例布尔值是真还是假? 在按下鼠标左键的状态下按下“Esc”键时不会调用KeyDown事件。 我怀疑你在鼠标移动事件处理程序中阻塞了 UI,这就是 KeyDown 的原因。你能显示更多代码吗?见minimal reproducible example。 我已经检查过了。我没有任何 UI 阻止代码。在我的应用程序中,我在 Border 内使用 ContentControl 并使用 Border 的 MouseMove 和 MouseLeftButtonDown 事件来调整大小。 这不是正常行为。您要么测试错误,要么执行错误。由于您没有提供任何信息,因此无法回答。 【参考方案1】:

也许你可以使用以下:

  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)的主要内容,如果未能解决你的问题,请参考以下文章

如何检测是不是在 HTML 页面上的任意位置按下了某个键?

如何检测 Actionscript 3 中是不是按下了删除键?

如何检测 C++ 中是不是按下了任何键?

检测是不是在 KeyRoutedEventArgs 事件中按下了修饰键

如何检测是不是按下了向上按钮

如何检测是不是在 C++ 中按下了除特定键盘键之外的任何键盘键?