Что значит "Захватить мышь" в WPF?

На System.Windows.UIElement E сть CaptureMouse() и в паре ReleaseMouseCapture() метод. В этом примере WPF DragDrop они вызывают CaptureMouse для MouseDown и выпускают его для MouseUp. Документация в MSDN так же бесполезна, как и сейчас - "CaptureMouse -> Захватывает мышь".

В голове перед попыткой я предположил, что она каким-то образом заблокировала мышь внутри границ UIElement, но это явно не тот случай, когда я пытаюсь это сделать. Из экспериментов кажется, что это как-то связано с реагированием на события, когда мышь находится за пределами UIElement, но не желает быть программистом культового груза. Я не хочу просто использовать это, потому что пример делает, я хотел бы авторитетное описание того, что это значит.

3 ответа

Решение

От захвата и снятия мыши на MSDN:

Когда объект захватывает мышь, все связанные с мышью события обрабатываются так, как будто объект с захватом мыши выполняет событие, даже если указатель мыши находится над другим объектом.

Захват мыши полезен для перетаскивания, потому что только элемент управления захватом получает события мыши, пока не отпущен. Весь код перетаскивания может существовать в одном элементе управления, а не распределяться по нескольким элементам управления.

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

Как правило, он используется для:

  • Перетащите
  • Кнопки (для работы с Mouse Up, когда вы нажимаете кнопку мыши и перемещаете мышь, прежде чем отпустить кнопку)

Документация к Silverlight 2 содержит более подробное описание, я не знаю, почему он не является частью страницы документации 3.5:

Когда объект захватил мышь, этот объект получает ввод мыши независимо от того, находится ли указатель мыши в пределах его ограничительной области. Мышь обычно захватывается только во время симулированных операций перетаскивания.
...

Он работает так же с WPF, и поэтому причина его использования с DragDrop заключается в том, что он знает, как сообщить о перетаскиваемом элементе управления, когда мышь может находиться вне этого элемента управления. Если вы закомментируете MyCanvas.Capture() и Capture(Null) (который очищает его), вы больше не сможете удалить.

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