2009-03-04 7 views

cevap

3

Silverlight'ta sürükleyip bırakmakla tam olarak ne yapmak istediğinizi açıklayabilir misiniz? Bu sayfaya bağlantılarına bağlanan söz konusu üst cevap: Bu kaynak ile örnek bir projeyi içeren http://www.adefwebserver.com/DotNetNukeHELP/Misc/Silverlight/DragAndDropTest/

sürükle ve bırak uygular (tesadüfen, ben Silverlight 2'nin beta 1 için yapılmış bir örneğe dayalı olarak: -)). Bu kod hakkında ne ihtiyaçlarınız için uygun değil?

DÜZENLEME:

bool isDragging = false; 

void elementMouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (element.CaptureMouse()) 
    { 
     isDragging = true; 
     element.MouseMove += elementMouseMove; 
     //start drag code goes here 
    } 
} 

void elementMouseMove(object sender, MouseEventArgs e) 
{ 
    //Drag code goes here 
} 

void element_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    if (isDragging) 
    { 
     element.ReleaseMouseCapture(); 
     isDragging = false; 
     element.MouseMove -= elementMouseMove; 

     //Drop code goes here 
    } 
} 

sen sürüklemek istediğiniz öğeye MouseLeftButtonUp/Aşağı işleyicileri ekleyin: bir sürükle temel iskeleti ve bırak uygulaması gibi görünecektir.

MouseMove olay işleyicisinde, sürükleme sırasında yürütmek istediğiniz kodu ekleyin: ör. Mouse konumunu değiştirmek için Canvas.Top ve Canvas.Left değiştirin. Fare konumunu olay arşivlerinden alabilirsiniz. Muhtemelen, elemanlar konteynerine göre pozisyon almak isteyeceksiniz.

MouseLeftButtonUp olay işleyicisinde, "bırakma" gerçekleştiğinde çalıştırılacak kodu ekleyin. Örneğin, öğelerin sürüklenebileceği bir "geri dönüşüm kutusu" uygulamak isteyebilirsiniz. Bu durumda, farenin altında hangi unsurların düşme noktasında olduğunu bilmek istersiniz. VisualTreeHelper.FindElementsAtHostCoordinates'i kullanarak, farenin konumunu uygulamanın kök dizinine göre geçirebilirsiniz (e.GetPosition (boş)). Sonra "geri dönüşüm kutusu" öğeniz FindElementsInHostCoordinates tarafından döndürüldüyse, uygun eylemi gerçekleştireceğinizi biliyorsunuz.

Bu, soruları cevaplamaya yardımcı olur mu?

+0

Cevabınız için teşekkürler - Ben sadece kodun içine kazmak yerine (zaman eksikliği) genel bir sürükle-bırak çözümünü uygulamak için bir dizi yüksek seviyeli adımları listelemek için zaten birileri istedim. – JohnIdol

+0

Daha fazla bilgi eklemek için cevabı düzenledim. – KeithMahoney

0

, MouseLeftButtonDown yakalamaya başlamamanız gereken yerde değil, mouseleftbuttonup'da değil mi?