Bagikan melalui


Gambaran Umum Seret dan Lepaskan

Topik ini memberikan gambaran umum tentang dukungan seret dan letakkan di aplikasi Windows Presentation Foundation (WPF). Seret dan letakkan biasanya mengacu pada metode transfer data yang melibatkan penggunaan mouse (atau beberapa perangkat penunjuk lainnya) untuk memilih satu atau beberapa objek, menyeret objek ini ke beberapa target penurunan yang diinginkan di antarmuka pengguna (UI), dan menjatuhkannya.

Dukungan Seret dan Letakkan di WPF

Operasi seret dan letakkan biasanya melibatkan dua pihak: sumber seret tempat objek yang diseret berasal dan target drop yang menerima objek yang dijatuhkan. Target seret sumber dan jatuhkan mungkin elemen UI dalam aplikasi yang sama atau aplikasi yang berbeda.

Jenis dan jumlah objek yang dapat dimanipulasi dengan seret dan letakkan sepenuhnya semena-mena. Misalnya, file, folder, dan pilihan konten adalah beberapa objek yang lebih umum dimanipulasi melalui operasi seret dan letakkan.

Tindakan tertentu yang dilakukan selama operasi seret dan letakkan adalah aplikasi khusus, dan sering ditentukan oleh konteks. Misalnya, menyeret pilihan file dari satu folder ke folder lain pada perangkat penyimpanan yang sama memindahkan file secara default, sedangkan menyeret file dari berbagi Universal Naming Convention (UNC) ke folder lokal menyalin file secara default.

Fasilitas seret dan letakkan yang disediakan oleh WPF dirancang agar sangat fleksibel dan dapat disesuaikan untuk mendukung berbagai skenario seret dan letakkan. Seret dan letakkan mendukung manipulasi objek dalam satu aplikasi, atau di antara aplikasi yang berbeda. Menyeret-dan-menjatuhkan antara aplikasi WPF dan aplikasi Windows lainnya juga didukung sepenuhnya.

Di WPF, setiap UIElement atau ContentElement dapat berpartisipasi dalam seret dan letakkan. Peristiwa dan metode yang diperlukan untuk operasi seret dan letakkan ditentukan di DragDrop kelas . Kelas UIElement dan ContentElement berisi alias untuk DragDrop peristiwa terlampir sehingga peristiwa muncul di daftar anggota kelas saat UIElement atau ContentElement diwariskan sebagai elemen dasar. Penanganan aktivitas yang dilampirkan ke peristiwa ini dilampirkan ke peristiwa terlampir yang mendasar DragDrop dan menerima instans data peristiwa yang sama. Untuk informasi selengkapnya, lihat peristiwa tersebut UIElement.Drop .

Penting

Seret dan letakkan OLE tidak berfungsi saat berada di zona Internet.

Transfer Data

Seret dan letakkan adalah bagian dari area transfer data yang lebih umum. Transfer data mencakup operasi seret dan letakkan dan salin dan tempel. Operasi seret dan letakkan dianalogikan dengan operasi salin dan tempel atau potong dan tempel yang digunakan untuk mentransfer data dari satu objek atau aplikasi ke objek lain dengan menggunakan clipboard sistem. Kedua jenis operasi memerlukan:

  • Objek sumber yang menyediakan data.

  • Cara untuk menyimpan data yang ditransfer untuk sementara waktu.

  • Objek target yang menerima data.

Dalam operasi salin dan tempel, clipboard sistem digunakan untuk menyimpan data yang ditransfer untuk sementara; dalam operasi seret dan letakkan, DataObject digunakan untuk menyimpan data. Secara konseptual, objek data terdiri dari satu atau beberapa pasangan yang berisi data aktual Object , dan pengidentifikasi format data yang sesuai.

Sumber seret memulai operasi seret dan letakkan dengan memanggil metode statis DragDrop.DoDragDrop dan meneruskan data yang ditransfer ke dalamnya. Metode ini DoDragDrop akan secara otomatis membungkus data jika DataObject perlu. Untuk kontrol yang lebih besar atas format data, Anda dapat membungkus data dalam DataObject sebelum meneruskannya ke DoDragDrop metode . Target penurunan bertanggung jawab untuk mengekstrak data dari DataObject. Untuk informasi selengkapnya tentang bekerja dengan objek data, lihat Objek Data dan Data.

Sumber dan target operasi seret dan letakkan adalah elemen UI; namun, data yang sebenarnya sedang ditransfer biasanya tidak memiliki representasi visual. Anda dapat menulis kode untuk memberikan representasi visual data yang diseret, seperti terjadi saat menyeret file di Windows Explorer. Secara default, umpan balik diberikan kepada pengguna dengan mengubah kursor untuk mewakili efek yang akan dimiliki operasi seret dan letakkan pada data, seperti apakah data akan dipindahkan atau disalin.

Efek Seret dan Letakkan

Operasi seret dan letakkan dapat memiliki efek yang berbeda pada data yang ditransfer. Misalnya, Anda dapat menyalin data atau Anda dapat memindahkan data. WPF menentukan DragDropEffects enumerasi yang dapat Anda gunakan untuk menentukan efek operasi seret dan letakkan. Di sumber seret, Anda dapat menentukan efek yang akan diizinkan sumber dalam DoDragDrop metode . Di target penurunan, Anda dapat menentukan efek yang diinginkan target dalam Effects properti DragEventArgs kelas. Saat target penurunan menentukan efek yang dimaksudkan dalam peristiwa tersebutDragOver, informasi tersebut diteruskan kembali ke sumber seret dalam peristiwa.GiveFeedback Sumber seret menggunakan informasi ini untuk memberi tahu pengguna efek apa yang ingin dimiliki target penurunan pada data. Saat data dihilangkan, target penurunan menentukan efek aktualnya dalam peristiwa tersebut Drop . Informasi tersebut diteruskan kembali ke sumber seret sebagai nilai DoDragDrop pengembalian metode. Jika target penurunan mengembalikan efek yang tidak ada dalam daftar allowedEffectssumber seret , operasi seret dan letakkan dibatalkan tanpa terjadi transfer data.

Penting untuk diingat bahwa dalam WPF, DragDropEffects nilai hanya digunakan untuk menyediakan komunikasi antara sumber seret dan target jatuh mengenai efek operasi seret dan letakkan. Efek aktual dari operasi seret dan letakkan tergantung pada Anda untuk menulis kode yang sesuai di aplikasi Anda.

Misalnya, target penurunan mungkin menentukan bahwa efek menjatuhkan data di dalamnya adalah memindahkan data. Namun, untuk memindahkan data, data harus ditambahkan ke elemen target dan dihapus dari elemen sumber. Elemen sumber mungkin menunjukkan bahwa elemen tersebut memungkinkan pemindahan data, tetapi jika Anda tidak menyediakan kode untuk menghapus data dari elemen sumber, hasil akhirnya adalah bahwa data disalin, dan tidak dipindahkan.

Peristiwa Seret dan Letakkan

Operasi seret dan letakkan mendukung model berbasis peristiwa. Sumber seret dan target jatuhkan menggunakan sekumpulan peristiwa standar untuk menangani operasi seret dan letakkan. Tabel berikut ini meringkas peristiwa seret dan letakkan standar. Ini adalah peristiwa yang dilampirkan di DragDrop kelas . Untuk informasi selengkapnya tentang peristiwa terlampir, lihat Gambaran Umum Peristiwa Terlampir.

Seret Peristiwa Sumber

Event Ringkasan
GiveFeedback Peristiwa ini terjadi terus menerus selama operasi seret dan letakkan, dan memungkinkan sumber penghilangan untuk memberikan informasi umpan balik kepada pengguna. Umpan balik ini umumnya diberikan dengan mengubah tampilan penunjuk mouse untuk menunjukkan efek yang diizinkan oleh target penurunan. Ini adalah peristiwa gelembung.
QueryContinueDrag Kejadian ini terjadi ketika ada perubahan pada status tombol keyboard atau mouse selama operasi seret dan letakkan, dan memungkinkan sumber penghilangan untuk membatalkan operasi seret dan letakkan tergantung pada status tombol/tombol. Ini adalah peristiwa gelembung.
PreviewGiveFeedback Versi penerowongan dari GiveFeedback.
PreviewQueryContinueDrag Versi penerowongan dari QueryContinueDrag.

Hilangkan Peristiwa Target

Event Ringkasan
DragEnter Peristiwa ini terjadi ketika objek diseret ke batas target drop. Ini adalah peristiwa gelembung.
DragLeave Peristiwa ini terjadi ketika objek diseret keluar dari batas target drop. Ini adalah peristiwa gelembung.
DragOver Peristiwa ini terjadi terus menerus saat objek diseret (dipindahkan) dalam batas target penurunan. Ini adalah peristiwa gelembung.
Drop Kejadian ini terjadi ketika objek dihilangkan pada target penghilangan. Ini adalah peristiwa gelembung.
PreviewDragEnter Versi penerowongan dari DragEnter.
PreviewDragLeave Versi penerowongan dari DragLeave.
PreviewDragOver Versi penerowongan dari DragOver.
PreviewDrop Versi penerowongan dari Drop.

Untuk menangani peristiwa seret dan letakkan untuk instans objek, tambahkan handler untuk peristiwa yang tercantum dalam tabel sebelumnya. Untuk menangani peristiwa seret dan letakkan di tingkat kelas, ambil alih metode On*Event dan On*PreviewEvent virtual yang sesuai. Untuk informasi selengkapnya, lihat Penanganan Kelas Peristiwa Yang Dirutekan berdasarkan Kelas Dasar Kontrol.

Menerapkan Seret dan Letakkan

Elemen UI dapat berupa sumber seret, target penurunan, atau keduanya. Untuk menerapkan seret dan letakkan dasar, Anda menulis kode untuk memulai operasi seret dan letakkan dan untuk memproses data yang dihilangkan. Anda dapat meningkatkan pengalaman seret dan letakkan dengan menangani peristiwa seret dan letakkan opsional.

Untuk menerapkan seret dan letakkan dasar, Anda akan menyelesaikan tugas berikut:

  • Identifikasi elemen yang akan menjadi sumber seret. Sumber seret bisa berupa UIElement atau ContentElement.

  • Buat penanganan aktivitas pada sumber seret yang akan memulai operasi seret dan letakkan. Acara ini biasanya MouseMove merupakan peristiwa.

  • Di penanganan aktivitas sumber seret, panggil DoDragDrop metode untuk memulai operasi seret dan letakkan. DoDragDrop Dalam panggilan, tentukan sumber seret, data yang akan ditransfer, dan efek yang diizinkan.

  • Identifikasi elemen yang akan menjadi target penurunan. Target penurunan bisa atau UIElementContentElement.

  • Pada target penghilangan, atur properti ke AllowDroptrue.

  • Di target penghilangan, buat Drop penanganan aktivitas untuk memproses data yang dihilangkan.

  • Di penanganan Drop aktivitas, ekstrak data dari DragEventArgs dengan menggunakan GetDataPresent metode dan GetData .

  • Di penanganan Drop aktivitas, gunakan data untuk melakukan operasi seret dan letakkan yang diinginkan.

Anda dapat meningkatkan implementasi seret dan letakkan dengan membuat kustom DataObject dan dengan menangani peristiwa target seret dan jatuhkan sumber opsional, seperti yang ditunjukkan dalam tugas berikut:

  • Untuk mentransfer data kustom atau beberapa item data, buat DataObject untuk meneruskan ke DoDragDrop metode .

  • Untuk melakukan tindakan tambahan selama seret, tangani DragEnterperistiwa , , DragOverdan DragLeave pada target penghilangan.

  • Untuk mengubah tampilan penunjuk mouse, tangani GiveFeedback peristiwa pada sumber seret.

  • Untuk mengubah cara operasi seret dan letakkan dibatalkan, tangani QueryContinueDrag peristiwa di sumber seret.

Contoh Seret dan Letakkan

Bagian ini menjelaskan cara menerapkan seret dan letakkan untuk Ellipse elemen. Ellipse adalah sumber seret dan target drop. Data yang ditransfer adalah representasi string dari properti elips Fill . XAML berikut menunjukkan Ellipse elemen dan peristiwa terkait seret dan letakkan yang ditanganinya. Untuk langkah-langkah lengkap tentang cara menerapkan seret dan letakkan, lihat Panduan: Mengaktifkan Seret dan Letakkan pada Kontrol Pengguna.

<Ellipse Height="50" Width="50" Fill="Green"
     MouseMove="ellipse_MouseMove"
     GiveFeedback="ellipse_GiveFeedback"
     AllowDrop="True"
     DragEnter="ellipse_DragEnter" DragLeave="ellipse_DragLeave"
     DragOver="ellipse_DragOver" Drop="ellipse_Drop" />

Mengaktifkan Elemen menjadi Sumber Seret

Objek yang merupakan sumber seret bertanggung jawab untuk:

  • Mengidentifikasi kapan seret terjadi.

  • Memulai operasi seret dan letakkan.

  • Mengidentifikasi data yang akan ditransfer.

  • Menentukan efek yang diizinkan untuk dimiliki operasi seret dan letakkan pada data yang ditransfer.

Sumber seret juga dapat memberikan umpan balik kepada pengguna mengenai tindakan yang diizinkan (memindahkan, menyalin, tidak ada), dan dapat membatalkan operasi seret dan letakkan berdasarkan input pengguna tambahan, seperti menekan tombol ESC selama seret.

Adalah tanggung jawab aplikasi Anda untuk menentukan kapan seret terjadi, lalu memulai operasi seret dan letakkan dengan memanggil DoDragDrop metode . Biasanya, ini adalah ketika MouseMove peristiwa terjadi di atas elemen yang akan diseret saat tombol mouse ditekan. Contoh berikut menunjukkan cara memulai operasi seret dan letakkan dari MouseMove penanganan Ellipse aktivitas elemen untuk menjadikannya sumber seret. Data yang ditransfer adalah representasi string dari properti elips Fill .

private void ellipse_MouseMove(object sender, MouseEventArgs e)
{
    Ellipse ellipse = sender as Ellipse;
    if (ellipse != null && e.LeftButton == MouseButtonState.Pressed)
    {
        DragDrop.DoDragDrop( ellipse,
                             ellipse.Fill.ToString(),
                             DragDropEffects.Copy);
    }
}
Private Sub Ellipse_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Input.MouseEventArgs)
    Dim ellipse = TryCast(sender, Ellipse)
    If ellipse IsNot Nothing AndAlso e.LeftButton = MouseButtonState.Pressed Then
        DragDrop.DoDragDrop(ellipse, ellipse.Fill.ToString(), DragDropEffects.Copy)
    End If
End Sub

MouseMove Di dalam penanganan aktivitas, panggil DoDragDrop metode untuk memulai operasi seret dan letakkan. Metode ini DoDragDrop mengambil tiga parameter:

  • dragSource – Referensi ke objek dependensi yang merupakan sumber data yang ditransfer; ini biasanya merupakan sumber MouseMove peristiwa.

  • data - Objek yang berisi data yang ditransfer, dibungkus dalam DataObject.

  • allowedEffects - Salah DragDropEffects satu nilai enumerasi yang menentukan efek yang diizinkan dari operasi seret dan letakkan.

Setiap objek yang dapat diserialisasikan dapat diteruskan dalam data parameter . Jika data belum dibungkus dalam DataObject, data akan secara otomatis dibungkus dalam baru DataObject. Untuk meneruskan beberapa item data, Anda harus membuat DataObject sendiri, dan meneruskannya ke DoDragDrop metode . Untuk informasi selengkapnya, lihat Objek Data dan Data.

Parameter allowedEffects digunakan untuk menentukan apa yang akan dilakukan sumber seret dengan target drop dengan data yang ditransfer. Nilai umum untuk sumber seret adalah Copy, Move, dan All.

Catatan

Target penurunan juga dapat menentukan efek apa yang ingin ditanggapi terhadap data yang dihilangkan. Misalnya, jika target penurunan tidak mengenali jenis data yang akan dihilangkan, target tersebut dapat menolak data dengan mengatur efek yang diizinkan ke None. Biasanya ini dilakukan dalam penanganan aktivitasnya DragOver .

Sumber seret dapat secara opsional menangani GiveFeedback peristiwa dan QueryContinueDrag . Peristiwa ini memiliki handler default yang digunakan kecuali Anda menandai peristiwa sebagai ditangani. Anda biasanya akan mengabaikan peristiwa ini kecuali Anda memiliki kebutuhan khusus untuk mengubah perilaku defaultnya.

Peristiwa GiveFeedback dinaikkan terus menerus saat sumber seret sedang diseret. Handler default untuk kejadian ini memeriksa apakah sumber seret melebihi target drop yang valid. Jika ya, itu memeriksa efek yang diizinkan dari target penurunan. Kemudian memberikan umpan balik kepada pengguna akhir mengenai efek penurunan yang diizinkan. Ini biasanya dilakukan dengan mengubah kursor mouse menjadi kursor tanpa jatuh, salin, atau pindahkan. Anda hanya boleh menangani peristiwa ini jika Anda perlu menggunakan kursor kustom untuk memberikan umpan balik kepada pengguna. Jika Anda menangani kejadian ini, pastikan untuk menandainya sebagai ditangani sehingga handler default tidak mengambil alih handler Anda.

Peristiwa QueryContinueDrag dinaikkan terus menerus saat sumber seret sedang diseret. Anda dapat menangani peristiwa ini untuk menentukan tindakan apa yang mengakhiri operasi seret dan letakkan berdasarkan status tombol ESC, SHIFT, CTRL, dan ALT, serta status tombol mouse. Handler default untuk kejadian ini membatalkan operasi seret dan letakkan jika tombol ESC ditekan, dan menghilangkan data jika tombol mouse dilepaskan.

Perhatian

Peristiwa ini dinaikkan terus menerus selama operasi seret dan letakkan. Oleh karena itu, Anda harus menghindari tugas intensif sumber daya di penanganan aktivitas. Misalnya, gunakan kursor cache alih-alih membuat kursor baru setiap kali GiveFeedback peristiwa dinaikkan.

Mengaktifkan Elemen menjadi Target Penghilangan

Objek yang merupakan target penghilangan bertanggung jawab untuk:

  • Menentukan bahwa itu adalah target drop yang valid.

  • Merespons sumber seret saat menyeret ke target.

  • Memeriksa apakah data yang ditransfer dalam format yang dapat diterimanya.

  • Memproses data yang dihilangkan.

Untuk menentukan bahwa elemen adalah target penurunan, Anda mengatur propertinya AllowDrop ke true. Peristiwa target drop kemudian akan dinaikkan pada elemen sehingga Anda dapat menanganinya. Selama operasi seret dan letakkan, urutan peristiwa berikut terjadi pada target penurunan:

  1. DragEnter

  2. DragOver

  3. DragLeave atau Drop

Peristiwa DragEnter terjadi ketika data diseret ke batas target drop. Anda biasanya menangani peristiwa ini untuk memberikan pratinjau efek dari operasi seret dan letakkan, jika sesuai untuk aplikasi Anda. Jangan atur DragEventArgs.Effects properti dalam DragEnter peristiwa, karena akan ditimpa dalam peristiwa tersebut DragOver .

Contoh berikut menunjukkan penanganan DragEnter aktivitas untuk Ellipse elemen. Kode ini mempratinjau efek operasi seret dan letakkan dengan menyimpan kuas saat ini Fill . Kemudian menggunakan GetDataPresent metode untuk memeriksa apakah yang DataObject diseret melalui elips berisi data string yang dapat dikonversi ke Brush. Jika demikian, data diekstrak menggunakan GetData metode . Kemudian dikonversi ke dan Brush diterapkan ke elips. Perubahan dikembalikan di penanganan DragLeave aktivitas. Jika data tidak dapat dikonversi ke Brush, tidak ada tindakan yang dilakukan.

private Brush _previousFill = null;
private void ellipse_DragEnter(object sender, DragEventArgs e)
{
    Ellipse ellipse = sender as Ellipse;
    if (ellipse != null)
    {
        // Save the current Fill brush so that you can revert back to this value in DragLeave.
        _previousFill = ellipse.Fill;

        // If the DataObject contains string data, extract it.
        if (e.Data.GetDataPresent(DataFormats.StringFormat))
        {
            string dataString = (string)e.Data.GetData(DataFormats.StringFormat);

            // If the string can be converted into a Brush, convert it.
            BrushConverter converter = new BrushConverter();
            if (converter.IsValid(dataString))
            {
                Brush newFill = (Brush)converter.ConvertFromString(dataString);
                ellipse.Fill = newFill;
            }
        }
    }
}
Private _previousFill As Brush = Nothing
Private Sub Ellipse_DragEnter(ByVal sender As System.Object, ByVal e As System.Windows.DragEventArgs)
    Dim ellipse = TryCast(sender, Ellipse)
    If ellipse IsNot Nothing Then
        ' Save the current Fill brush so that you can revert back to this value in DragLeave.
        _previousFill = ellipse.Fill

        ' If the DataObject contains string data, extract it.
        If e.Data.GetDataPresent(DataFormats.StringFormat) Then
            Dim dataString = e.Data.GetData(DataFormats.StringFormat)

            ' If the string can be converted into a Brush, convert it.
            Dim converter As New BrushConverter()
            If converter.IsValid(dataString) Then
                Dim newFill As Brush = CType(converter.ConvertFromString(dataString), Brush)
                ellipse.Fill = newFill
            End If
        End If
    End If
End Sub

Peristiwa DragOver terjadi terus menerus saat data diseret ke target drop. Kejadian ini dipasangkan dengan GiveFeedback peristiwa pada sumber seret. Di penanganan DragOver aktivitas, Anda biasanya menggunakan GetDataPresent metode dan GetData untuk memeriksa apakah data yang ditransfer dalam format yang dapat diproses target penurunan. Anda juga dapat memeriksa apakah ada tombol pengubah yang ditekan, yang biasanya akan menunjukkan apakah pengguna berniat memindahkan atau menyalin tindakan. Setelah pemeriksaan ini dilakukan, Anda mengatur DragEventArgs.Effects properti untuk memberi tahu sumber seret efek apa yang akan dihilangkan data. Sumber seret menerima informasi ini di GiveFeedback arg peristiwa, dan dapat mengatur kursor yang sesuai untuk memberikan umpan balik kepada pengguna.

Contoh berikut menunjukkan penanganan DragOver aktivitas untuk Ellipse elemen. Kode ini memeriksa untuk melihat apakah elips DataObject yang diseret berisi data string yang dapat dikonversi ke Brush. Jika demikian, ia mengatur properti ke DragEventArgs.EffectsCopy. Ini menunjukkan ke sumber seret bahwa data dapat disalin ke elips. Jika data tidak dapat dikonversi ke Brush, DragEventArgs.Effects properti diatur ke None. Ini menunjukkan ke sumber seret bahwa elips bukan target penurunan yang valid untuk data.

private void ellipse_DragOver(object sender, DragEventArgs e)
{
    e.Effects = DragDropEffects.None;

    // If the DataObject contains string data, extract it.
    if (e.Data.GetDataPresent(DataFormats.StringFormat))
    {
        string dataString = (string)e.Data.GetData(DataFormats.StringFormat);

        // If the string can be converted into a Brush, allow copying.
        BrushConverter converter = new BrushConverter();
        if (converter.IsValid(dataString))
        {
            e.Effects = DragDropEffects.Copy | DragDropEffects.Move;
        }
    }
}
Private Sub Ellipse_DragOver(ByVal sender As System.Object, ByVal e As System.Windows.DragEventArgs)
    e.Effects = DragDropEffects.None

    ' If the DataObject contains string data, extract it.
    If e.Data.GetDataPresent(DataFormats.StringFormat) Then
        Dim dataString = e.Data.GetData(DataFormats.StringFormat)

        ' If the string can be converted into a Brush, convert it.
        Dim converter As New BrushConverter()
        If converter.IsValid(dataString) Then
            e.Effects = DragDropEffects.Copy Or DragDropEffects.Move
        End If
    End If
End Sub

Peristiwa DragLeave terjadi ketika data diseret keluar dari batas target tanpa dihilangkan. Anda menangani kejadian ini untuk mengurungkan apa pun yang Anda lakukan di penanganan DragEnter aktivitas.

Contoh berikut menunjukkan penanganan DragLeave aktivitas untuk Ellipse elemen. Kode ini membatalkan pratinjau yang dilakukan di DragEnter penanganan aktivitas dengan menerapkan penyimpanan Brush ke elips.

private void ellipse_DragLeave(object sender, DragEventArgs e)
{
    Ellipse ellipse = sender as Ellipse;
    if (ellipse != null)
    {
        ellipse.Fill = _previousFill;
    }
}
Private Sub Ellipse_DragLeave(ByVal sender As System.Object, ByVal e As System.Windows.DragEventArgs)
    Dim ellipse = TryCast(sender, Ellipse)
    If ellipse IsNot Nothing Then
        ellipse.Fill = _previousFill
    End If
End Sub

Peristiwa Drop terjadi ketika data dihilangkan di atas target penurunan; secara default, ini terjadi ketika tombol mouse dirilis. Di penanganan Drop aktivitas, Anda menggunakan GetData metode untuk mengekstrak data yang DataObject ditransfer dari dan melakukan pemrosesan data apa pun yang diperlukan aplikasi Anda. Peristiwa Drop mengakhiri operasi seret dan letakkan.

Contoh berikut menunjukkan penanganan Drop aktivitas untuk Ellipse elemen. Kode ini menerapkan efek operasi seret dan letakkan, dan mirip dengan kode di penanganan DragEnter aktivitas. Ini memeriksa untuk melihat apakah yang DataObject diseret melalui elips berisi data string yang dapat dikonversi ke Brush. Jika demikian, Brush diterapkan ke elips. Jika data tidak dapat dikonversi ke Brush, tidak ada tindakan yang dilakukan.

private void ellipse_Drop(object sender, DragEventArgs e)
{
    Ellipse ellipse = sender as Ellipse;
    if (ellipse != null)
    {
        // If the DataObject contains string data, extract it.
        if (e.Data.GetDataPresent(DataFormats.StringFormat))
        {
            string dataString = (string)e.Data.GetData(DataFormats.StringFormat);

            // If the string can be converted into a Brush,
            // convert it and apply it to the ellipse.
            BrushConverter converter = new BrushConverter();
            if (converter.IsValid(dataString))
            {
                Brush newFill = (Brush)converter.ConvertFromString(dataString);
                ellipse.Fill = newFill;
            }
        }
    }
}
Private Sub Ellipse_Drop(ByVal sender As System.Object, ByVal e As System.Windows.DragEventArgs)
    Dim ellipse = TryCast(sender, Ellipse)
    If ellipse IsNot Nothing Then

        ' If the DataObject contains string data, extract it.
        If e.Data.GetDataPresent(DataFormats.StringFormat) Then
            Dim dataString = e.Data.GetData(DataFormats.StringFormat)

            ' If the string can be converted into a Brush, convert it.
            Dim converter As New BrushConverter()
            If converter.IsValid(dataString) Then
                Dim newFill As Brush = CType(converter.ConvertFromString(dataString), Brush)
                ellipse.Fill = newFill
            End If
        End If
    End If
End Sub

Baca juga