WPF 强制 MouseDevice 被按下

10
我有一个Windows表单在WPF窗口中,我试图在单击Windows表单时使用DragMove,它是一个图片框,所以我想通过单击图片来拖动窗口。
我捕获了我的表单的鼠标按下事件,并使用以下方式触发WPF窗口的MouseLeftButtonDown事件:
if (e.Button == MouseButtons.Left)
{
    MouseDevice mouseDev = InputManager.Current.PrimaryMouseDevice;
    MouseButtonEventArgs mouseEvent = new MouseButtonEventArgs(mouseDev, 0, MouseButton.Left)
        {
            RoutedEvent = MouseLeftButtonDownEvent
        };
    RaiseEvent(mouseEvent);
}

然而,每当我从我的处理程序(或我的窗体的MouseMove处理程序)检查InputManager.Current.PrimaryMouseDevice时,LeftButton的状态都是“released”。

为什么会这样呢?我无法想出一种强制它变为“pressed”的方法,因为所有属性都是只读的。

或者我的方法根本就是错误的,不可能实现?我也尝试在鼠标移动时设置窗口的位置,但一些奇怪的问题会发生,我的鼠标值会不断返回到前一个位置。

谢谢!

编辑:因此,我正在手动调整窗口位置,但仍希望有人能启发我为什么MouseDevice在Windows表单上没有被按下。 “奇怪的事情发生了……”只是我的愚蠢错误,我在鼠标移动时不断重置鼠标坐标,但意识到我的鼠标相对于窗口永远不会移动,因为窗口也在移动,傻瓜!

1个回答

1

有一个类似的问题困扰了我一段时间:MouseButtonEventArgs的ButtonState属性反映了该按钮的实时状态,而不是事件被触发时拍摄的状态快照。我想知道在您访问LeftButton状态时是否也是如此。

希望这可以帮到您,
Ben


不完全是这样;由于我正在进行点击和拖动操作,当触发MouseDown事件时,实时状态仍应为“按下”,但它并没有被按下。也许这与Windows表单有关。当我在表单外单击时,它告诉我鼠标已按下,但如果我在表单内单击,则不会。 - mmod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接