Невозможно удалить обработчик событий в wpf

В своем коде я делаю следующее:

        mouse_down = new MouseButtonEventHandler(Ship_Mouse_Down);
        mouse_move = new MouseEventHandler(Ship_Mouse_Move);
        mouse_up = new MouseButtonEventHandler(Ship_Mouse_Up);

        foreach (Image i in PlayerField.Children)
        {
            i.MouseUp += mouse_up;
            i.MouseDown += mouse_down;
            i.MouseMove += mouse_move;
            i.Source = (ImageSource)Resources["sea"];
        }

Это добавляет обработчики к соответствующим изображениям. Затем, когда игрок нажимает кнопку, я делаю это:

        foreach (Image i in PlayerField.Children)
        {
            i.MouseDown -= mouse_down;
            i.MouseUp -= mouse_up;
            i.MouseMove -= mouse_move;
        }

Но кажется, что обработчики все еще работают, и я не знаю, как отключить их навсегда.

2 ответа

Всегда сначала удаляйте обработчики событий, а затем добавляйте, возможно, вы добавляете их несколько раз.

foreach (Image i in PlayerField.Children)
{
    i.MouseUp -= mouse_up;
    i.MouseDown -= mouse_down;
    i.MouseMove -= mouse_move;

    i.MouseUp += mouse_up;
    i.MouseDown += mouse_down;
    i.MouseMove += mouse_move;

    i.Source = (ImageSource)Resources["sea"];
}

Извините за неудобства, я обнаружил, что есть те же обработчики, но применяются к контейнерам изображений в XAML, поэтому я не смог их найти.

Другие вопросы по тегам