Sürükleme ve Bırakmaya Genel Bakış

Bu konu, uygulamalarda sürükle ve bırak desteğine genel bir bakış sağlar Windows Presentation Foundation (WPF) . Sürükleyip bırakma genellikle bir veya daha fazla nesne seçmek için fare (veya başka bir işaret aygıtı) kullanan bir veri aktarımı yöntemine başvurur ve bu nesneleri, içindeki belirli bir bırakma hedefi üzerine sürükleyip kullanıcı arabirimi (UI) bırakarak bunları bırakabilir.

WPF 'de sürükle ve bırak desteği

Sürükle ve bırak işlemleri genellikle iki taraf içerir: sürüklenen nesnenin kaynaklandığı Sürükle kaynağı ve bırakılan nesneyi alan bir bırakma hedefi. Sürükle kaynağı ve bırakma hedefi, aynı uygulamadaki veya farklı bir uygulamadaki UI öğeleri olabilir.

Sürükle ve bırak ile işlenebilen nesnelerin türü ve sayısı tamamen rasgele olur. Örneğin, dosyalar, klasörler ve içerik seçimleri, sürükle ve bırak işlemleri aracılığıyla daha yaygın olarak kullanılan nesnelerden bazılarıdır.

Bir sürükle ve bırak işlemi sırasında gerçekleştirilen belirli eylemler uygulamaya özgüdür ve genellikle bağlam tarafından belirlenir. Örneğin, aynı depolama cihazında bir klasörden diğerine dosya seçimini sürüklemek, dosyaları varsayılan olarak taşırken bir evrensel adlandırma kuralı (UNC) paylaşımından yerel bir klasöre sürüklemek dosyaları varsayılan olarak kopyalar.

Tarafından sunulan sürükle ve bırak olanakları, çok WPF çeşitli sürükle ve bırak senaryolarını destekleyecek şekilde oldukça esnek ve özelleştirilebilir olacak şekilde tasarlanmıştır. Sürükle ve bırak, nesneleri tek bir uygulama içinde veya farklı uygulamalar arasında düzenleme destekler. WPFUygulamalar ve diğer Windows uygulamaları arasında sürükleme ve bırakma de tam olarak desteklenmektedir.

WPF' De, herhangi bir UIElement veya ContentElement sürükleyip bırakmaya katılabilir. Sürükle ve bırak işlemleri için gereken olaylar ve yöntemler DragDrop sınıfında tanımlanır. UIElementVe ContentElement sınıfları, DragDrop bir UIElement veya ContentElement temel öğe olarak Devralındığı zaman, olayların sınıf üyeleri listesinde görünmesi için, ekli olayların diğer adlarını içerir. Bu olaylara eklenen olay işleyicileri, temel alınan DragDrop ekli olaya iliştirilir ve aynı olay veri örneğini alır. Daha fazla bilgi için, UIElement.Drop olayına bakın.

Önemli

OLE sürükle ve bırak Internet bölgesinde çalışırken çalışmaz.

Veri Aktarımı

Sürükle ve bırak, veri aktarımının daha genel alanının bir parçasıdır. Veri aktarımı sürükle ve bırak ile kopyalama ve yapıştırma işlemlerini içerir. Bir sürükle ve bırak işlemi, sistem panosunu kullanarak bir nesneden veya uygulamadan diğerine veri aktarmak için kullanılan bir kopyalama ve yapıştırma ya da kesme ve yapıştırma işlemine benzer. Her iki tür işlem şunları gerektirir:

  • Verileri sağlayan kaynak nesne.

  • Aktarılan verileri geçici olarak depolamanın bir yolu.

  • Verileri alan bir hedef nesne.

Bir Kopyala ve Yapıştır işleminde, sistem panosu, aktarılan verileri geçici olarak depolamak için kullanılır; sürükle ve bırak işleminde, DataObject verileri depolamak için kullanılır. Kavramsal olarak, bir veri nesnesi, gerçek verileri içeren bir veya daha fazla çiftinin Object ve karşılık gelen bir veri biçimi tanımlayıcısını kapsar.

Sürükleme kaynağı, statik DragDrop.DoDragDrop yöntemi çağırarak ve aktarılan verileri buna geçirerek bir sürükle ve bırak işlemi başlatır. DoDragDropYöntemi, gerekirse verileri otomatik olarak bir halinde saracaktır DataObject . Veri biçimi üzerinde daha fazla denetim için, verileri yöntemine geçirmeden önce bir içinde sardırabilirsiniz DataObject DoDragDrop . Bırakma hedefi, öğesinden verilerin ayıklanmasından sorumludur DataObject . Veri nesneleriyle çalışma hakkında daha fazla bilgi için bkz. veri ve veri nesneleri.

Bir sürükle ve bırak işleminin kaynağı ve hedefi Kullanıcı arabirimi öğeleridir; Ancak, gerçekten aktarılmakta olan verilerin genellikle görsel temsili yoktur. Windows Gezgini 'nde dosyaları sürüklerken oluşan gibi sürüklenen verilerin görsel bir gösterimini sağlamak için kod yazabilirsiniz. Varsayılan olarak, imleç sürükle ve bırak işleminin veriler üzerinde sahip olacağı etkiyi (verilerin taşınıp taşınacağını veya kopyalanmayacağı gibi) belirtecek şekilde değiştirerek kullanıcıya geri bildirim verilir.

Sürükle ve bırak efektleri

Sürükle ve bırak işlemlerinin, aktarılan veriler üzerinde farklı etkileri olabilir. Örneğin, verileri kopyalayabilir veya verileri taşıyabilirsiniz. WPFDragDropEffectsbir sürükle ve bırak işleminin etkisini belirtmek için kullanabileceğiniz bir sabit listesi tanımlar. Sürükleme kaynağında, kaynağın yöntemde izin verolacağı etkileri belirtebilirsiniz DoDragDrop . Bırakma hedefinde, hedefin sınıfının özelliğinde amaçladığı etkiyi belirtebilirsiniz Effects DragEventArgs . Bırakma hedefi, olaydaki amaçlanan etkisini belirttiğinde DragOver , bu bilgiler olaydaki sürükleme kaynağına geri geçirilir GiveFeedback . Sürükleme kaynağı bu bilgileri kullanıcıya, bırakma hedefinin verileri ne kadar etkili olduğunu bildirmek için kullanır. Veriler bırakıldığında bırakma hedefi, olayda gerçek etkisini belirtir Drop . Bu bilgiler, metodun dönüş değeri olarak sürükle kaynağına geçirilir DoDragDrop . Bırakma hedefi, sürükle kaynakları listesinde olmayan bir efekt döndürürse allowedEffects , sürükle ve bırak işlemi herhangi bir veri aktarımı yapılmaksızın iptal edilir.

' De WPF , DragDropEffects değerleri yalnızca sürükle ve bırak işleminin etkileri ile ilgili sürükleme kaynağı ve bırakma hedefi arasında iletişim sağlamak için kullanıldığını unutmayın. Sürükle ve bırak işleminin gerçek etkisi, uygulamanıza uygun kodu yazmak için size bağlıdır.

Örneğin, bırakma hedefi, verileri bırakma efektinin verileri taşımakta olduğunu belirtebilir. Ancak, verileri taşımak için hem hedef öğeye eklenmeli hem de kaynak öğeden kaldırılacak olması gerekir. Kaynak öğe, verilerin taşınmasına izin verdiğini belirtebilir, ancak kaynak öğeden verileri kaldırmak için kod sağlamazsanız, nihai sonuç verilerin kopyalanmasının ve taşınmayacağı anlamına gelir.

Sürükle ve bırak olayları

Sürükle ve bırak işlemleri olay temelli bir modeli destekler. Sürükleme kaynağı ve bırakma hedefi, sürükle ve bırak işlemlerini işlemek için standart bir olay kümesi kullanır. Aşağıdaki tablolar, standart Sürükle ve bırak olaylarını özetler. Bunlar, sınıfındaki ekli olaylardır DragDrop . Ekli olaylar hakkında daha fazla bilgi için bkz. ekli olaylara genel bakış.

Kaynak olaylarını sürükle

Olay Özet
GiveFeedback Bu olay bir sürükle ve bırak işlemi sırasında sürekli gerçekleşir ve bırakma kaynağının kullanıcıya geri bildirim bilgileri vermesini sağlar. Bu geri bildirim genellikle, bırakma hedefinin izin verdiği etkileri göstermek üzere fare işaretçisinin görünümü değiştirilerek verilir. Bu bir kabarcıklanma olayıdır.
QueryContinueDrag Bu olay, sürükle ve bırak işlemi sırasında klavyede veya fare düğmesi durumunda olduğunda meydana gelir ve bırakma kaynağının anahtar/düğme durumlarına bağlı olarak sürükle ve bırak işlemini iptal etmesini sağlar. Bu bir kabarcıklanma olayıdır.
PreviewGiveFeedback Tünel oluşturma sürümü GiveFeedback .
PreviewQueryContinueDrag Tünel oluşturma sürümü QueryContinueDrag .

Bırakma hedefi olayları

Olay Özet
DragEnter Bu olay, bir nesne bırakma hedefinin sınırına sürüklendiğinde oluşur. Bu bir kabarcıklanma olayıdır.
DragLeave Bu olay, bir nesne bırakma hedefinin sınırının dışına sürüklendiğinde oluşur. Bu bir kabarcıklanma olayıdır.
DragOver Bu olay, bırakma hedefinin sınırının içinde bir nesne sürüklendiğinde (taşındığında) sürekli gerçekleşir. Bu bir kabarcıklanma olayıdır.
Drop Bu olay bırakma hedefinde bir nesne bırakıldığında oluşur. Bu bir kabarcıklanma olayıdır.
PreviewDragEnter Tünel oluşturma sürümü DragEnter .
PreviewDragLeave Tünel oluşturma sürümü DragLeave .
PreviewDragOver Tünel oluşturma sürümü DragOver .
PreviewDrop Tünel oluşturma sürümü Drop .

Bir nesnenin örnekleri için sürükle ve bırak olaylarını işlemek için, önceki tablolarda listelenen olaylara yönelik işleyiciler ekleyin. Sürükle ve bırak olaylarını sınıf düzeyinde işlemek için, karşılık gelen sanal on * olayını ve * PreviewEvent yöntemlerini geçersiz kılın. Daha fazla bilgi için bkz. temel sınıfları denetim aracılığıyla yönlendirilmiş olayların sınıf işlemesi.

Sürükle ve bırak uygulama

Bir kullanıcı arabirimi öğesi, bir Sürükle kaynağı, bir bırakma hedefi veya her ikisi olabilir. Temel sürükle ve bırak uygulamak için sürükle ve bırak işlemini başlatmak ve bırakılan verileri işlemek için kod yazarsınız. Sürükleme ve bırakma deneyimini, isteğe bağlı sürükle ve bırak olaylarını işleyerek geliştirebilirsiniz.

Temel sürükle ve bırak uygulamak için aşağıdaki görevleri tamamlayacaksınız:

  • Sürükle kaynağı olacak öğeyi belirler. Sürükle kaynağı bir UIElement veya bir olabilir ContentElement .

  • Sürükleme kaynağında sürükle ve bırak işlemini başlatacak bir olay işleyicisi oluşturun. Olay genellikle MouseMove olaydır.

  • Sürükle DoDragDrop ve bırak işlemini başlatmak için kaynak olay işleyicisindeki yöntemi çağırın. Çağrıda, DoDragDrop Sürükle kaynağını, aktarılacak verileri ve izin verilen etkileri belirtin.

  • Bırakma hedefi olacak öğeyi belirler. Bırakma hedefi UIElement veya olabilir ContentElement .

  • Bırakma hedefinde AllowDrop özelliğini olarak ayarlayın true .

  • Bırakma hedefinde, Drop bırakılan verileri işlemek için bir olay işleyicisi oluşturun.

  • DropOlay işleyicisinde, DragEventArgs ve yöntemlerini kullanarak içindeki verileri ayıklayın GetDataPresent GetData .

  • DropOlay işleyicisinde, istenen sürükleme ve bırakma işlemini gerçekleştirmek için verileri kullanın.

Sürükle ve bırak uygulamanızı, DataObject aşağıdaki görevlerde gösterildiği gibi isteğe bağlı Sürükle kaynak ve bırakma hedefi olaylarını işleyerek bir özel oluşturarak geliştirebilirsiniz:

  • Özel verileri veya birden çok veri öğesini aktarmak için, DataObject yöntemine geçirilecek bir oluşturun DoDragDrop .

  • Sürükleme sırasında ek eylemler gerçekleştirmek için DragEnter DragOver DragLeave bırakma hedefinin, ve olaylarını işleyin.

  • Fare işaretçisinin görünüşünü değiştirmek için GiveFeedback Sürükle kaynağındaki olayı işleyin.

  • Sürükle ve bırak işleminin nasıl iptal edildiğini değiştirmek için QueryContinueDrag Sürükle kaynağında olayı işleyin.

Sürükle ve bırak örneği

Bu bölümde bir öğesi için sürükle ve bırak 'ın nasıl uygulanacağı açıklanmaktadır Ellipse . , Ellipse Bir Sürükle kaynağı ve bırakma hedefidir. Aktarılan veriler, elips özelliğinin dize gösterimidir Fill . Aşağıdaki XAML, Ellipse öğesini ve işlediği, sürükle ve bırak ile ilgili olayları gösterir. Sürükleyip bırakmayı uygulama hakkında tam adımlar için bkz. Izlenecek yol: Kullanıcı denetiminde sürükleme ve bırakmayı etkinleştirme.

<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" />

Bir öğenin sürükle kaynağı olmasını sağlama

Sürükleme kaynağı olan bir nesne şu kaynaktan sorumludur:

  • Bir sürükleme işleminin ne zaman gerçekleşeceğini tanımlama.

  • Sürükle ve bırak işlemi başlatılıyor.

  • Aktarılacak verileri tanımlama.

  • Sürükle ve bırak işleminin aktarılan verilerde sahip olmasına izin verilen etkileri belirtme.

Sürükleme kaynağı, kullanıcıya izin verilen eylemlerle ilgili geri bildirimde bulunabilir (taşıma, kopyalama, yok) ve sürükleme sırasında ESC tuşuna basmak gibi, sürükle ve bırak işlemini ek kullanıcı girişine göre iptal edebilir.

Bu, bir sürükleme işleminin ne zaman gerçekleşeceğini tespit etmek ve sonra yöntemi çağırarak Sürükle ve bırak işlemini başlatmak için uygulamanızın sorumluluğundadır DoDragDrop . Genellikle, bu, MouseMove fare düğmesine basıldığında sürüklediğiniz öğe üzerinde bir olay meydana geldi. Aşağıdaki örnek, MouseMove bir Ellipse sürükleme kaynağı yapmak için bir öğenin olay işleyicisinden bir sürükle ve bırak işleminin nasıl başlatılacağı gösterilmektedir. Aktarılan veriler, elips özelliğinin dize gösterimidir 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

MouseMoveOlay işleyicisinin içinde, DoDragDrop sürükle ve bırak işlemini başlatmak için yöntemini çağırın. DoDragDropYöntemi üç parametre alır:

  • dragSource – Aktarılan verilerin kaynağı olan Dependency nesnesine bir başvuru; Bu genellikle MouseMove olayın kaynağıdır.

  • data -İçinde kaydırılan, aktarılan verileri içeren bir nesne DataObject .

  • allowedEffects - DragDropEffects Sürükle ve bırak işleminin izin verilen etkilerini belirten sabit listesi değerlerinden biri.

Seri hale getirilebilir herhangi bir nesne parametreye geçirilebilir data . Veriler henüz bir içinde DataObject sarmalanmamış ise, otomatik olarak yeni bir ile sarmalanır DataObject . Birden çok veri öğesi geçirmek için DataObject kendiniz oluşturmanız ve yöntemine geçirmeniz gerekir DoDragDrop . Daha fazla bilgi için bkz. veri ve veri nesneleri.

Bu allowedEffects parametre, sürükleme kaynağının, aktarılan verilerle birlikte bırakma hedefinin ne izin verbileceklerini belirtmek için kullanılır. Bir sürükleme kaynağı için ortak değerler Copy , ve ' dir Move All .

Not

Bırakma hedefi, bırakılan verilere yanıt olarak hangi etkileri amaçladığı de belirtebilir. Örneğin, bırakma hedefi bırakılacak veri türünü tanımazsa, izin verilen etkileri olarak ayarlayarak verileri reddedebilirler None . Genellikle bunu DragOver olay işleyicide yapar.

Sürükleme kaynağı isteğe bağlı olarak GiveFeedback ve olaylarını işleyebilir QueryContinueDrag . Olayları işlenmiş olarak işaretlemediğiniz sürece bu olayların varsayılan işleyicileri kullanılır. Genellikle bu olayları, varsayılan davranışlarını değiştirmek için özel bir işlem yapmanız gerekmedikçe yoksayabilirsiniz.

GiveFeedbackSürükleme kaynağı sürüklenirken olay sürekli olarak getirilir. Bu olay için varsayılan işleyici, sürükleme kaynağının geçerli bir bırakma hedefi üzerinde olup olmadığını denetler. Varsa, bırakma hedefinin izin verilen efektlerini denetler. Daha sonra, izin verilen bırakma efektleriyle ilgili olarak son kullanıcıya geri bildirim sağlar. Bu, genellikle fare imlecini bırakma, kopyalama veya taşıma imlecine göre değiştirilerek yapılır. Yalnızca kullanıcıya geri bildirim sağlamak için özel imleçler kullanmanız gerekiyorsa bu olayı işlemeniz gerekir. Bu olayı idare ederseniz, varsayılan işleyicinin işleyicinizi geçersiz kılmaması için, onu işlenmiş olarak işaretlediğinizden emin olun.

QueryContinueDragSürükleme kaynağı sürüklenirken olay sürekli olarak getirilir. Bu olayı, sürükle ve bırak işlemini ESC, SHIFT, CTRL ve ALT tuşlarının yanı sıra fare düğmelerinin durumunu temel alarak hangi eylemin bittiğini belirlemek için işleyebilirsiniz. Bu olay için varsayılan işleyici, ESC tuşuna basıldığında sürükle ve bırak işlemini iptal eder ve fare düğmesi serbest bırakıldığında verileri bırakır.

Dikkat

Bu olaylar, sürükle ve bırak işlemi sırasında sürekli olarak oluşturulur. Bu nedenle, olay işleyicilerinde kaynakların yoğun görevlerinin olmaması gerekir. Örneğin, olay her oluşturulduğunda yeni bir imleç oluşturmak yerine önbelleğe alınmış bir imleç kullanın GiveFeedback .

Bir öğeyi bırakma hedefi olarak etkinleştirme

Bırakma hedefi olan bir nesne, öğesinden sorumludur:

  • Bunun geçerli bir bırakma hedefi olduğunu belirtme.

  • Hedef üzerine sürüklendiğinde sürükle kaynağına yanıt verme.

  • Aktarılan verilerin alabileceği bir biçimde olup olmadığı denetleniyor.

  • Bırakılan veriler işleniyor.

Bir öğenin bırakma hedefi olduğunu belirtmek için AllowDrop özelliğini olarak ayarlayın true . Bırakma hedefi olayları, daha sonra işleyebilmeniz için öğesi üzerinde oluşturulur. Bir sürükle ve bırak işlemi sırasında, bırakma hedefinde aşağıdaki olay dizisi gerçekleşir:

  1. DragEnter

  2. DragOver

  3. DragLeave veya Drop

Bu DragEnter olay, veriler bırakma hedefinin sınırına sürüklendiğinde oluşur. Bu olayı genellikle, uygulamanız için uygunsa sürükle ve bırak işleminin etkilerinin önizlemesini sağlamak üzere işleyebilirsiniz. Olayda DragEventArgs.Effects DragEnter üzerine yazılacak şekilde, özelliği olayda ayarlamayın DragOver .

Aşağıdaki örnekte DragEnter bir öğesi için olay işleyicisi gösterilmektedir Ellipse . Bu kod, geçerli fırçayı kaydederek sürükle ve bırak işleminin etkilerini önizlemeler Fill . Ardından, GetDataPresent DataObject elips üzerine sürüklenemekte olan dize verileri içerip içermediğini denetlemek için yöntemini kullanır Brush . Öyleyse, veriler yöntemi kullanılarak ayıklanır GetData . Daha sonra bir öğesine dönüştürülür Brush ve elips 'e uygulanır. Değişiklik DragLeave olay işleyicisine geri döndürülür. Veriler bir öğesine dönüştürülemiyorsa Brush hiçbir işlem yapılmaz.

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

DragOverVeriler bırakma hedefinin üzerine sürüklenirken olay sürekli gerçekleşir. Bu olay, GiveFeedback sürükleme kaynağındaki olayla eşleştirilir. DragOverOlay işleyicisinde, genellikle, GetDataPresent GetData aktarılan verilerin bırakma hedefinin işleyebilip işlenemediğini denetlemek için ve yöntemlerini kullanırsınız. Ayrıca, bir değiştirici tuşuna basıldığında, genellikle kullanıcının bir taşıma veya kopyalama eylemi yapıp belirtmediğini de denetleyebilirsiniz. Bu denetimler gerçekleştirildikten sonra, DragEventArgs.Effects Sürükle kaynağına verilerin hangi etkilerden hangilerinin sahip olacağını bildirmek için özelliğini ayarlayın. Sürükle kaynağı bu bilgileri GiveFeedback olay bağımsız değişkenlerinin içinde alır ve kullanıcıya geri bildirim vermek için uygun bir imleç ayarlayabilir.

Aşağıdaki örnekte DragOver bir öğesi için olay işleyicisi gösterilmektedir Ellipse . Bu kod, DataObject elips üzerine sürüklenemekte olan dize verilerini içerip içermediğini kontrol eder Brush . Varsa, DragEventArgs.Effects özelliğini olarak ayarlar Copy . Bu, sürükle kaynağına verilerin elips 'e kopyalanamayacağını gösterir. Veriler bir öğesine dönüştürülemiyorsa Brush , DragEventArgs.Effects özelliği olarak ayarlanır None . Bu, sürükle kaynağına, elipsin veri için geçerli bir bırakma hedefi olmadığını gösterir.

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

DragLeaveVeriler, verilerin bırakılmadan önce hedef sınırın dışına sürüklenmesi durumunda meydana gelir. Olay işleyicisinde yaptığınız herhangi bir şeyi geri almak için bu olayı işleyebilirsiniz DragEnter .

Aşağıdaki örnekte DragLeave bir öğesi için olay işleyicisi gösterilmektedir Ellipse . Bu kod, DragEnter kayıt, elips 'e kaydedilmiş şekilde uygulanarak olay işleyicisinde gerçekleştirilen önizlemeyi geri alır Brush .

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

DropBu olay, veriler bırakma hedefinin üzerine bırakıldığında oluşur; Varsayılan olarak, fare düğmesi bırakıldığında gerçekleşir. DropOlay işleyicisinde, GetData öğesinden aktarılan verileri ayıklamak DataObject ve uygulamanızın gerektirdiği tüm veri işlemlerini gerçekleştirmek için yöntemini kullanırsınız. DropOlay sürükle ve bırak işlemini sonlandırır.

Aşağıdaki örnekte Drop bir öğesi için olay işleyicisi gösterilmektedir Ellipse . Bu kod, sürükle ve bırak işleminin etkilerini uygular ve DragEnter olay işleyicisindeki koda benzerdir. DataObjectElips üzerine sürüklenemekte olup olmadığını kontrol eder Brush . Varsa, bu, Brush elips 'e uygulanır. Veriler bir öğesine dönüştürülemiyorsa Brush hiçbir işlem yapılmaz.

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

Ayrıca bkz.