2010-11-24 11 views
1

J'ai un Listbox, qui contient un texte valeursComment déterminer événement Baisse DragSource

<ListBox x:Name="DragSource" PreviewMouseMove="DragSource_OnPreviewMouseMove" SelectedValuePath="Content"> 
    <ListBoxItem>first</ListBoxItem> 
    <ListBoxItem>second</ListBoxItem> 
</ListBox> 

et gestionnaire d'événements

private void DragSource_OnPreviewMouseMove(object sender, MouseEventArgs e) 
{ 
if (e.LeftButton == MouseButtonState.Pressed && DragSource.SelectedItem != null) 
{ 
    var data = new DataObject(DataFormats.Serializable, DragSource.SelectedItem); 
    var value = (string)DragSource.SelectedValue; 
    data.SetData(DataFormats.Text, value); 
    var de = DragDrop.DoDragDrop(DragSource, data, DragDropEffects.All); 
} 
} 

Les articles peuvent être déposés à mon autre ListBox ou dans d'autres applications comme Word ou Excel. Comment puis-je détecter ce texte a été supprimé (par exemple dans Word) et supprimer ListBoxItem si l'effet DragDrop est "Move"?

Répondre

2

Aucune application tierce ne vous indiquera qu'elle a déplacé votre ListBoxItem. Au mieux, il utilisera la représentation textuelle et vous dira qu'il a été copié. Obtenir un mouvement nécessite une cible qui peut reconnaître votre objet dans son gestionnaire d'événement DragEnter et décider qu'il peut en assumer la responsabilité. Vous seul pouvez écrire un tel gestionnaire d'événements.

+0

Mon dragsource a des événements GiveFeedback et QueryContinueDrag, où je peux trouver les effets qui s'appliquent maintenant. QueryContinueDragEventArgs possède une action qui peut être Annuler, Supprimer ou Continuer. Mais je reçois seulement l'événement Continue. – Steck

+0

QCD est uniquement là pour vous permettre de changer le D + D lorsque l'état du clavier ou de la souris a changé. Oui, Action est définie sur Continuer car c'est la valeur par défaut. L'affecter termine le D + D. –