2010-11-15 7 views
0

J'utilise un LibraryBar pour afficher certains éléments qui ont une relation. Comme il existe différentes relations entre les éléments, j'ai plusieurs conteneurs. Comme le paramètre par défaut if est défini sur AllowDrop sur true pour un LibraryBar, il est possible de faire glisser tous les éléments dans LibraryBar et les éléments sont ajoutés à la collection dans laquelle ils sont déposés.Comment AllowDrop uniquement pour des types spécifiques?

Maintenant, je ne le veux pas. Je ne veux pas qu'il soit possible de faire glisser un élément d'un LibraryBar à un autre. Cependant, je ne peux pas simplement définir AllowDrop sur false, car je veux faire glisser certaines TagVisualizations dans LibraryBar.

donc je définis ma méthode qui gère DropEvents:

public void OnTargetDrop(object sender, SurfaceDragDropEventArgs e) 
     { 
      //only if TagVisualization 
      if (e.Cursor.Data is Image) 
      { 
       ((sender as LibraryBar).Tag as ISourceFile).unexpand(); 
       e.Handled = true; 
      } 
      else 
      { 
       //TODO: cancel Drag&Drop 
      } 
     } 

Comme vous pouvez le voir, je permets que des gouttes si les données sont une image (et donc je maintenant un TagVisualization) du curseur. Cela fonctionne, il n'est plus possible de déposer un élément d'un autre LibraryBar dans ce LibraryBar. Cependant, l'animation qui est jouée si un objet est déplacé sur une bibliothèque est toujours jouée. Comment puis-je également désactiver cette animation pour des types spécifiques?

Répondre

1

Ajoutez un gestionnaire d'événement pour l'événement DragCompleted. Définissez gérée comme égale à true pour tous les types que vous souhaitez exclure. Les DragCompletedEventArgs ont également la propriété Cursor.Data.

+0

Merci, mais je pense que cela ne fonctionne pas. J'ai copié ce code dans le corps else: e.Effects = DragDropEffects.None; Mais il n'y a pas de différence. – RoflcoptrException

+0

Désolé, cela n'a pas fonctionné pour vous. Je viens de lire ceci dans les remarques de la page MSDN. "Contrairement à la propriété System.Windows.Forms.DragEventArgs.Effect, la propriété Effects n'affecte pas le curseur de glissement, elle sert uniquement à informer la source de glissement du type d'opération à effectuer." –

+0

Que diriez-vous de l'événement DragCompleted? Vous pouvez essayer de définir la valeur true et cela peut empêcher l'animation. Vous avez toujours accès à la propriété cursor avec DragCompletedEventArgs. –

Questions connexes