在鼠标捕获后丢失Silverlight鼠标抬起事件?

4
我创建了一个非常简单的测试控件,在画布上有一个矩形(在其他容器中,但不重要)。该矩形具有鼠标按下、移动和释放的事件处理程序。如果我在矩形的MouseLeftButtonDown事件中捕获鼠标,则不会收到相应的MouseLeftButtonUp事件。
一些代码:
private void rect1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (_captured = CaptureMouse())
    {
        _offset = new Point(Canvas.GetLeft(rect1), Canvas.GetTop(rect1));
        _origin = e.GetPosition(RootCanvas);
        e.Handled = true;
    }
}


private void rect1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    if (_captured)
    {
        ReleaseMouseCapture();
        _captured = false;
        e.Handled = true;
    }
}

我还为容器元素附加了事件处理程序,只是为了确保它们中没有一个会以某种方式获取鼠标松开事件,但没有一个元素获取到该事件。我是否还有一些未学习的关于Silverlight的期望?


我在开发一个WPF应用程序时注意到了一个类似的问题,但是我将其解除了,因为我试图在按下其他鼠标按钮时捕获鼠标。当我意识到它只适用于左键按下时,我放弃了这种方法,并没有进一步调查这个问题。 - ChrisF
2个回答

2

我认为你对于实际捕获鼠标事件的过程还有些困惑。

考虑以下情况:

 if (_captured = CaptureMouse())

这句话的意思是,CaptureMouse 方法被调用的对象是什么?

答案是:你的代码所在的用户控件。如果你想让矩形捕获鼠标,你可以这样做:

 if (_captured = rect1.CaptureMouse())

不是太困惑,只是没有注意到。这是我今天的尴尬时刻。谢谢你指出本应显而易见的事情。 - redman

1
从 mouseDown 事件中调用 CaptureMouse() 方法,然后尝试执行。

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