Dukungan Automasi UI untuk Drag-and-Drop
Microsoft UI Automation mendefinisikan dua pola kontrol untuk mendukung skenario seret dan letakkan, pola kontrol Seret , dan pola kontrol DropTarget . Anda menerapkan pola kontrol Seret untuk elemen yang dapat diseret, dan pola kontrol DropTarget untuk elemen yang dapat menerima elemen yang diseret; yaitu, target jatuh. Dua pola kontrol mengekspos informasi yang dapat digunakan teknologi bantuan untuk membantu pengguna aksesibilitas menyelesaikan operasi seret dan letakkan.
Gaya Penyeretan
Saat Anda menerapkan pola kontrol Seret untuk elemen yang dapat diseret, Anda perlu memutuskan apakah akan mengimplementasikan gaya seret sumber/target , atau gaya seret sumber saja .
Gaya Sumber/target
Dalam gaya sumber/target seret dan letakkan, elemen yang diseret ("sumber") dan elemen drop-target ("target") berbeda, dan masing-masing menimbulkan serangkaian peristiwa yang berbeda. Berikut adalah siklus hidup untuk operasi seret yang menggunakan gaya sumber/target:
- Saat pengguna memulai operasi seret:
- Sumber menaikkan peristiwa DragStart (UIA_Drag_DragStartEventId).
- Sumber mengatur properti IDragProvider::IsGrabbed ke TRUE.
- Target memperbarui properti DropTargetEffect mereka.
- Target menaikkan peristiwa DragEnter (UIA_DropTarget_DragEnterEventId).
- Target menaikkan peristiwa DragLeave (UIA_DropTarget_DragLeaveEventId).
- Sumber meningkatkan peristiwa DragCancel (UIA_Drag_DragCancelEventId).
- Sumber mengatur properti IDragProvider::IsGrabbed ke FALSE.
- Sumber menaikkan peristiwa DragComplete (UIA_Drag_DragCompleteEventId).
- Sumber mengatur properti IDragProvider::IsGrabbed ke FALSE.
- Target menetapkan properti IDropTargetProvider::D ropTargetEffect untuk menunjukkan efek yang terjadi.
- Target menaikkan peristiwa Dihilangkan (UIA_DropTarget_DroppedEventId).
Saat operasi seret memasuki wilayah target:
Saat operasi seret meninggalkan wilayah target:
Saat pengguna merilis item yang diseret melalui non-target:
Saat pengguna merilis item yang diseret ke target:
Peristiwa dari objek sumber dan target terkait erat, tetapi berbeda. Data tentang apa yang diseret berasal dari sumbernya, sementara data tentang "apa yang bisa terjadi" dan "apa yang terjadi" berasal dari target.
Saat operasi seret sedang berlangsung, item yang diseret dapat diseret masuk dan keluar dari wilayah target beberapa kali sebelum operasi selesai.
Setiap target penurunan yang perlu memperbarui properti IDropTargetProvider::D ropTargetEffect dengan cepat harus meningkatkan peristiwa perubahan properti tambahan pada properti tersebut.
Gaya Sumber-saja
Gaya seret sumber saja memungkinkan penyedia menghindari penerapan target penurunan. Tidak menerapkan target penurunan membantu menurunkan biaya implementasi, tetapi tidak memberikan informasi apa pun kepada aplikasi klien aksesibilitas tentang objek yang menerima penurunan. Berikut adalah siklus hidup untuk operasi seret yang menggunakan gaya sumber saja:
- Saat pengguna memulai operasi seret:
- Sumber menaikkan peristiwa DragStart (UIA_Drag_DragStartEventId).
- Sumber mengatur properti IDragProvider::IsGrabbed ke TRUE.
- Sumber menetapkan properti IDragProvider::D ropEffect ke nilai yang sesuai.
- Sumber menetapkan properti IDragProvider::D ropEffect ke nilai yang sesuai.
- Sumber meningkatkan peristiwa DragCancel (UIA_Drag_DragCancelEventId).
- Sumber mengatur properti IDragProvider::IsGrabbed ke FALSE.
- Sumber menaikkan peristiwa DragComplete (UIA_Drag_DragCompleteEventId).
- Sumber mengatur properti IDragProvider::D ropEffect untuk menunjukkan efek yang terjadi ketika item dihilangkan.
Saat operasi seret memasuki wilayah target:
Saat operasi seret meninggalkan wilayah target:
Saat pengguna merilis item yang diseret melalui non-target:
Saat pengguna merilis item yang diseret ke target:
Menyeret Beberapa Item
Jika penyedia menerapkan operasi seret dan letakkan di mana pengguna dapat menyeret beberapa objek secara bersamaan, penyedia menggunakan gaya sumber/target atau sumber-saja seperti yang dijelaskan di bagian sebelumnya, tetapi dengan perbedaan kecil. Saat pengguna memulai operasi seret, penyedia membuat elemen sumber master yang mewakili set lengkap item yang sedang diseret. Elemen sumber master menaikkan semua peristiwa atas nama sekumpulan item yang diseret; item tidak memunculkan peristiwa apa pun sendiri.
- Saat pengguna memulai operasi seret:
- Penyedia membuat elemen sumber master.
- Elemen sumber master menaikkan peristiwa DragStart (UIA_Drag_DragStartEventId).
- Elemen sumber master mengatur properti IDragProvider::IsGrabbed ke TRUE.
- Elemen sumber master memperbarui daftar item yang diambil untuk menyertakan semua item yang diseret sehingga metode GetGrabbedItems dapat mengambil daftar.
Untuk titik tersebut, elemen sumber master melakukan peran yang sama dengan elemen sumber seperti yang dijelaskan di bagian sebelumnya.
Antarmuka Klien untuk Seret dan Letakkan
Aplikasi klien Automation UI menggunakan antarmuka IUIAutomationDragPattern dan IUIAutomationDropTargetPattern untuk mengakses informasi seret dan letakkan dari elemen UI.