为什么不要修饰键'在鼠标移动操作期间状态如预期更改?

时间:2015-10-13 16:46:57

标签: c# wpf mouse parallels modifier-key

想知道是否有其他人遇到此问题。在El Capitan上使用Parallels 11中的Windows 10 VM时,如果您在鼠标事件中按下鼠标键,则无法检查修改键。

我观察鼠标当前是否已关闭,Parallels仅在鼠标按钮或不同的非修改键盘键改变状态(或释放不同的修改键时)发送/存储修改键更改按下时。)

所以......有谁知道怎么解决这个问题?我们绝对想支持Parallels。 (我还向他们提出了一个关于此问题的错误,因为它肯定是错误的。)

这是代码。只需创建一个新项目并将其粘贴到主窗口的代码隐藏中。

bool isDragging;

protected override void OnMouseDown(MouseButtonEventArgs e)
{
    if(e.ClickCount == 1 && e.ChangedButton == MouseButton.Left)
    {
        e.Handled = true;
        isDragging = true;
        CaptureMouse();
    }
    base.OnMouseDown(e);
}

protected override void OnMouseMove(MouseEventArgs e)
{
    if(isDragging)
    {
        e.Handled = true;
        Title = "Pressed: " + (Keyboard.Modifiers == ModifierKeys.Shift);
    }
    base.OnMouseMove(e);
}

protected override void OnMouseUp(MouseButtonEventArgs e)
{
    if(isDragging && e.ChangedButton == MouseButton.Left)
    {
        e.Handled = true;
        isDragging = false;
        ReleaseMouseCapture();
    }
    base.OnMouseUp(e);
}

1 个答案:

答案 0 :(得分:1)

Aaaaah!问题解决了!它不是一个bug本身,但它是由Parallels引起的,是你必须明确启用的。

具体而言,您必须将键盘的设置更改为“优化游戏”'。这告诉Parallels使用关键通知消息更加冗长。

为什么他们决定称之为“优化游戏”'而不是更具信息性的东西,或者至少更好地解释了这个功能的作用超出了我的范围。几天的测试和尝试解决方案之后是Parallels提交的错误报告,只是为了发现它可以通过设置进行控制。这是我的软件架构师。我甚至无法想象非技术人员会在这里经历什么。对Parallels来说真的很糟糕。

enter image description here