Потеря событий Silverlight при запуске мыши после захвата мыши? - PullRequest
4 голосов
/ 16 июля 2010

Я создал очень простой тестовый элемент управления с Rectangle на холсте (в других контейнерах, но несущественно).Rectangle имеет обработчики событий для мыши, перемещения мыши и мыши вверх.Если я фиксирую мышь в событии MouseLeftButtonDown Rectangle, я не получаю соответствующее событие 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 ]

2 голосов
/ 16 июля 2010

Я думаю, вы немного запутались в том, что на самом деле захватывает события мыши.

Подумайте, когда вы сделаете следующее: -

 if (_captured = CaptureMouse())

какой объект действительно вызывается CaptureMouseпротив?

Ответ: Пользовательский элемент управления, для которого ваш код является кодом.Если бы вы хотели, чтобы прямоугольник захватил мышь, вы бы сделали: -

 if (_captured = rect1.CaptureMouse())
1 голос
/ 23 ноября 2011

CaptureMouse ();от события mouseDown, а затем попробуйте.

...