鼠标捕获后丢失Silverlight鼠标事件?

时间:2010-07-16 13:42:22

标签: silverlight user-controls mouse

我创建了一个非常简单的测试控件,在画布上有一个Rectangle(在其他容器中,但无关紧要)。 Rectangle具有用于鼠标按下,鼠标移动和鼠标按下的事件处理程序。如果我在Rectangle的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中对此的期望吗?

2 个答案:

答案 0 :(得分:2)

我认为您对实际捕获鼠标事件的内容感到困惑。

当你这样做时考虑: -

 if (_captured = CaptureMouse())

实际被调用的CaptureMouse是什么对象?

答案:代码为代码隐藏的用户控件。如果你想要矩形捕获鼠标你会做: -

 if (_captured = rect1.CaptureMouse())

答案 1 :(得分:1)

CaptureMouse();从mouseDown事件开始,然后尝试。