2009-03-04 7 views

Répondre

3

Pourriez-vous expliquer exactement ce que vous souhaitez réaliser en faisant glisser et déposer dans Silverlight? La partie supérieure réponse à la question que vous avez lié des liens vers cette page: http://www.adefwebserver.com/DotNetNukeHELP/Misc/Silverlight/DragAndDropTest/

Il contient un exemple de projet avec la source qui implémente le glisser-déposer (par pure coïncidence, sur la base d'un échantillon que j'ai fait pour la bêta 1 de Silverlight 2: -)). Qu'en est-il de ce code qui ne convient pas à vos besoins?

EDIT: Le squelette de base d'un glisser-déposer la mise en œuvre ressemblerait à ceci:

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 
    } 
} 

Ajouter les gestionnaires MouseLeftButtonUp/vers le bas à l'élément que vous souhaitez faire glisser.

Dans le gestionnaire d'événements MouseMove, ajoutez le code que vous souhaitez exécuter pendant le glissement: par ex. changez Canvas.Top et Canvas.Left pour correspondre à la position de la souris. Vous pouvez obtenir la position de la souris à partir des arguments de l'événement. Vous voudrez probablement obtenir la position relative au conteneur d'éléments.

Dans le gestionnaire d'événements MouseLeftButtonUp, ajoutez le code qui s'exécuterait lorsque le "drop" se produit. Par exemple, vous pouvez implémenter une "corbeille" dans laquelle les éléments peuvent être déplacés. Dans ce cas, vous voudriez savoir quels éléments se trouvent sous la souris au point de chute. Vous pouvez utiliser VisualTreeHelper.FindElementsAtHostCoordinates, en passant la position de la souris par rapport à la racine de l'application (utilisez e.GetPosition (null)). Ensuite, si votre élément "corbeille" est renvoyé par FindElementsInHostCoordinates, vous savez exécuter l'action appropriée.

Est-ce que cela vous aide à répondre à vos questions?

+0

merci pour votre réponse - Je voulais juste que quelqu'un l'a déjà fait pour énumérer un certain nombre d'étapes de haut niveau pour implémenter une solution de drag & drop générique dans silverlight plutôt que creuser dans le code (manque de temps). – JohnIdol

+0

J'ai édité la réponse pour inclure plus d'informations. – KeithMahoney

0

n'est pas MouseLeftButtonDown où vous êtes censé commencer la capture, pas sur mouseleftbuttonup?