Obsługa automatyzacji interfejsu użytkownika dla przeciągania i upuszczania
Automatyzacja interfejsu użytkownika firmy Microsoft definiuje dwa wzorce sterujące do obsługi scenariuszy przeciągania i upuszczania, wzorca kontrolki przeciągania i wzorca kontrolki DropTarget. Zaimplementujesz wzorzec kontrolki Przeciągnij dla elementu, który można przeciągnąć, oraz wzorzec kontrolki DropTarget dla elementu, który może otrzymać przeciągnięty element; oznacza to, cel spadku. Dwa wzorce sterowania uwidaczniają informacje, których technologia asystacyjna może użyć, aby ułatwić użytkownikowi ułatwienia dostępu ukończenie operacji przeciągania i upuszczania.
- przeciąganie stylów
- przeciąganie wielu elementów
- interfejsy klienta dla przeciągania i upuszczania
Przeciąganie stylów
Podczas implementowania wzorca kontrolki przeciągania dla elementu przeciąganego należy zdecydować, czy zaimplementować styl przeciągania źródła/celu lub styl przeciągania tylko do źródła przeciągania.
Styl źródłowy/docelowy
W stylu źródłowym/docelowym przeciągania i upuszczania przeciągnięty element ("źródło") i element docelowy drop-target (element docelowy) są odrębne, a każdy wywołuje odrębny zestaw zdarzeń. Oto cykl życia operacji przeciągania, która używa stylu źródłowego/docelowego:
- Gdy użytkownik uruchamia operację przeciągania:
- Źródło wywołuje zdarzenie DragStart (UIA_Drag_DragStartEventId).
- Źródło ustawia właściwość IDragProvider::IsGrabbed na true.
- Obiekty docelowe aktualizują swoje właściwości DropTargetEffect.
- Obiekt docelowy zgłasza zdarzenie DragEnter (UIA_DropTarget_DragEnterEventId).
- Obiekt docelowy zgłasza zdarzenie DragLeave (UIA_DropTarget_DragLeaveEventId).
- Źródło wywołuje zdarzenie DragCancel (UIA_Drag_DragCancelEventId).
- Źródło ustawia właściwość IDragProvider::IsGrabbed na FALSE.
- Źródło wywołuje zdarzenie DragComplete (UIA_Drag_DragCompleteEventId).
- Źródło ustawia właściwość IDragProvider::IsGrabbed na FALSE.
- Obiekt docelowy ustawia właściwość IDropTargetProvider::D ropTargetEffect, aby wskazać efekt, który wystąpił.
- Obiekt docelowy zgłasza zdarzenie Porzucone (UIA_DropTarget_DroppedEventId).
Gdy operacja przeciągania przechodzi do regionu docelowego:
Gdy operacja przeciągania opuszcza region docelowy:
Gdy użytkownik zwolni przeciągnięty element na element inny niż docelowy:
Gdy użytkownik zwolni przeciągnięty element nad elementem docelowym:
Zdarzenia z obiektów źródłowych i docelowych są ściśle powiązane, ale odrębne. Dane o tym, co jest przeciągane, pochodzą ze źródła, podczas gdy dane dotyczące "tego, co może się zdarzyć" i "co się stało" pochodzi z celu.
Gdy operacja przeciągania jest w toku, przeciągnięty element może być przeciągany do i z regionów docelowych dowolną liczbę razy przed zakończeniem operacji.
Każdy obiekt docelowy upuszczania, który musi zaktualizować jego IDropTargetProvider::D ropTargetEffect właściwości na bieżąco, powinien zgłosić dodatkowe zdarzenie zmiany właściwości dla tej właściwości.
Styl tylko do źródła
Styl przeciągania tylko do źródła pozwala dostawcy uniknąć implementowania miejsc docelowych upuszczania. Nie implementowanie celów upuszczania pomaga obniżyć koszt implementacji, ale nie zapewnia ułatwień dostępu aplikacjom klienckim żadnych informacji o obiekcie, który otrzymał spadek. Oto cykl życia operacji przeciągania, która używa stylu tylko do źródła:
- Gdy użytkownik uruchamia operację przeciągania:
- Źródło wywołuje zdarzenie DragStart (UIA_Drag_DragStartEventId).
- Źródło ustawia właściwość IDragProvider::IsGrabbed na true.
- Źródło ustawia właściwość IDragProvider::D ropEffect na odpowiednią wartość.
- Źródło ustawia właściwość IDragProvider::D ropEffect na odpowiednią wartość.
- Źródło wywołuje zdarzenie DragCancel (UIA_Drag_DragCancelEventId).
- Źródło ustawia właściwość IDragProvider::IsGrabbed na FALSE.
- Źródło wywołuje zdarzenie DragComplete (UIA_Drag_DragCompleteEventId).
- Źródło ustawia właściwość IDragProvider::D ropEffect, aby wskazać efekt, który miał miejsce, gdy element został porzucony.
Gdy operacja przeciągania przechodzi do regionu docelowego:
Gdy operacja przeciągania opuszcza region docelowy:
Gdy użytkownik zwolni przeciągnięty element na element inny niż docelowy:
Gdy użytkownik zwolni przeciągnięty element nad elementem docelowym:
Przeciąganie wielu elementów
Jeśli dostawca implementuje operacje przeciągania i upuszczania, w których użytkownik może przeciągać wiele obiektów jednocześnie, dostawca używa stylów źródłowych/docelowych lub tylko do źródła, jak opisano w poprzedniej sekcji, ale z niewielką różnicą. Gdy użytkownik rozpocznie operację przeciągania, dostawca tworzy główny element źródłowy reprezentujący pełny zestaw przeciąganych elementów. Główny element źródłowy zgłasza wszystkie zdarzenia w imieniu zestawu przeciąganych elementów; elementy nie zgłaszają żadnych zdarzeń.
- Gdy użytkownik uruchamia operację przeciągania:
- Dostawca tworzy główny element źródłowy.
- Element źródłowy master zgłasza zdarzenie DragStart (UIA_Drag_DragStartEventId).
- Główny element źródłowy ustawia właściwość IDragProvider::IsGrabbed na TRUE.
- Główny element źródłowy aktualizuje listę pobranych elementów w celu uwzględnienia wszystkich przeciągniętych elementów, aby metodę GetGrabbedItems mogła pobrać listę.
W tym momencie element źródłowy wzorca wykonuje tę samą rolę co element źródłowy, co element źródłowy opisany w poprzedniej sekcji.
Interfejsy klienta dla przeciągania i upuszczania
Aplikacje klienckie automatyzacji interfejsu użytkownika używają interfejsów IUIAutomationDragPattern i IUIAutomationDropTargetPattern interfejsy w celu uzyskania dostępu do informacji przeciągania i upuszczania z elementów interfejsu użytkownika.