2009-06-02 15 views
62

Na System.Windows.UIElement znajduje się metoda CaptureMouse() i sparowana metoda . W tej próbce WPF DragDrop nazywają CaptureMouse na MouseDown i wypuszczają ją na MouseUp. Model documentation in MSDN jest tak samo bezużyteczny jak to tylko możliwe - "CaptureMouse -> Przechwytuje mysz".Co to znaczy "Przechwyć mysz" w WPF?

W mojej głowie, zanim spróbowałem, założyłem, że w jakiś sposób zablokował mysz w granicach UIElement, ale to wyraźnie nie jest tak, kiedy próbuję. Od eksperymentów wydaje się, że ma to coś wspólnego z reagowaniem na zdarzenia, gdy mysz znajduje się poza UIElement, ale nie chce być cargo cult programmer Nie chcę po prostu użyć tego, ponieważ przykład, chciałbym autorytatywny opis tego, co to znaczy.

Odpowiedz

70

Od Capture and Uncapture the Mouse na MSDN:

Gdy obiekt przechwytuje myszy, wszystkie zdarzenia myszy związane są traktowane tak, jakby obiekt z wychwytem myszy wykonać zdarzenie, nawet wtedy, gdy wskaźnik myszy znajduje się nad innym obiektem.

Przechwytywanie myszy jest przydatne do przeciągania, ponieważ tylko kontrolka przechwytywania odbiera zdarzenia myszy do momentu zwolnienia. Cały kod przeciągania może istnieć w jednym kontrolerze, a nie być rozłożony na wiele kontrolek.

+12

Najważniejszą na myszach przechwytujących jest ** kontrola przechwytywania ** odbiera zdarzenia myszy. –

+0

Takich bardzo ważnych informacji nie wymieniono w dokumencie MSDN – user1034912

3

Silverlight 2 documentation ma za to bardziej rozwlekły opis, nie wiem, dlaczego to nie jest część strony 3,5 dokumentacji też:

Gdy obiekt zdobył myszy, obiekt odbiera wejście myszy, niezależnie od tego, czy wskaźnik myszy znajduje się w jego obszarze ograniczającym. Mysz jest zwykle przechwytywana tylko podczas symulowanych operacji przeciągania.
...

To działa tak samo z WPF, a więc powód jest używany z dragdrop, jest to, że jest jak to wie, zgłoś się do kontroli przeciągane od kiedy mysz może być poza tą kontrolą. Jeśli skomentujesz MyCanvas.Capture() i Capture (Null) (które wyczyści to), to nie możesz już spaść.

+0

Z cytowanej dokumentacji SL: "Mysz jest zwykle przechwytywana tylko podczas symulowanych operacji przeciągania." - czym jest "zasymulowana operacja przeciągania" i czym różni się ona od rzeczywistej? Dzięki. – Sabuncu

11

Po przechwyceniu myszy kontrolka odbiera zdarzenia myszy, nawet jeśli wskaźnik myszy nie znajduje się już w obrębie ograniczonego obszaru.

Zazwyczaj jest używany do:

  • przeciągnij i upuść
  • Przyciski (do obsługi myszy, gdy umieścisz kursor myszy w dół na przycisk i przesuń mysz przed zwolnieniem przycisku)