Silverlight API Drag and Drop
Présentation
Glisser-déposer est un paradigme commun UX et une fonction haut demandé. Dans Silverlight 4 Beta, nous avons introduit un ensemble de base de l'API pour permettre le scénario le plus commun de glisser les fichiers images et en les déposant dans les applications Silverlight, et nous avons conçu l'API afin de nous permettre d'exposer plus de traînée et de fonctionnalités déroulant la route sans changement d'API , nous l'espérons.
API
Ci-dessous est le noyau de la nouvelle API:
namespace System.Windows
{
publique UIElement classe abstraite: DependencyObject
{
/ / Champs
public static readonly DependencyProperty AllowDropProperty;
/ / Événements
publique DragEventHandler événement DragEnter;
événement public DragEventHandler DragLeave;
publique DragEventHandler événement DragOver;
Déposer publique DragEventHandler événement;
/ / Propriétés
publique AllowDrop bool {get; jeu;}
}
sender, DragEventArgs e); publique DragEventHandler nulle délégué (object sender, DragEventArgs e);
publics fermés de classe DragEventArgs: RoutedEventArgs
{
/ / Méthodes
Point de GetPosition publique (UIElement relativeTo);
/ / Propriétés
publique IDataObject données {[SecuritySafeCritical] get;}
public bool manipulés {get; jeu;}
}
}
System.Windows.Controls namespace
{
publiques de contrôle classe abstraite: FrameworkElement
{
protected void virtuels OnDragEnter (DragEventArgs e);
protected void virtuels OnDragLeave (DragEventArgs e);
protégée OnDragOver virtual void (DragEventArgs e);
protégée onDrop virtual void (DragEventArgs e);
}
}
- AllowDrop: c'est la propriété de dépendance, indiquant si un élément est une cible de dépôt.
- DragEnter, DragLeave, DragOver & Drop: ces événements sont mis en déroute. Ils bouillonnent, et le feu uniquement sur les éléments mis en AllowDrop à true.
- OnDragEnter, OnDragLeave, OnDragOver & onDrop: elles sont protégées des fonctions virtuelles pour les sous-classes d'outrepasser.
- DragEventArgs: cette classe permet gestionnaires chute de cible de l'événement ou remplace la méthode pour accéder aux données d'être traîné ou abandonnées.
Utilisation
Il existe principalement deux façons d'utiliser le glisser Silverlight et API déposer:
- Applications Silverlight peuvent gérer ces événements cible de dépôt et de traiter les fichiers déposés dans les gestionnaires d'événements.
- Contrôles Silverlight peuvent remplacer ces fonctions cible de dépôt virtuel pour traiter les données étant glissés et déposés, et permettre d'être eux-mêmes cibles de dépôt.
Limitations
La fonctionnalité de glisser-déposer expédiés dans Silverlight 4 Beta permet seulement le scénario le plus courant: plugin Silverlight comme une cible de dépôt de fichier. S'il vous plaît préavis les limitations suivantes avec la mise en œuvre actuelle:
- il n'ya pas de support de source de chute (QueryContinueDrag & GiveFeedback).
- il n'ya pas de DragDropEffects ou DragDropKeyStates de DragEventArgs.
- il n'ya pas de visuel pour l'objet traîné ou DragDropEffects.
- glisser-déposer de fichiers uniquement est pris en charge:
- tous les événements cible de dépôt le feu que lorsque les fichiers sont glissées et déposées.
- IDataObject, DataObject et DragEventArgs.Data soutenir un seul format: "FileDrop", et les données sont de type FileInfo [].
- la plupart des méthodes IDataObject jettent NotImplementedException.
- pour la faire glisser et déposer pour fonctionner sur Windows, le plugin Silverlight doit être fenêtré. Dans un autre mot, si <param name="windowless" value="true"/> est spécifiée, les événements ne se déclenche pas tomber.
- depuis Silverlight plugin sur Mac est toujours sans fenêtre, vous devez raccorder des événements chute de JavaScript afin de déclencher des événements chute de Silverlight. Dans un autre mot, si vous voulez que votre application Silverlight pour soutenir déposer le fichier sur Mac ainsi que Windows, vous devrez ajouter le script suivant et Silverlight attributs plugin pour l'hébergement html ou aspx:
<! - Ajouter un script qui suit avant la fin de la balise HEAD ->
<script type= "text/javascript">
Fonction handleDragEnter (oEvent) {
/ / Empêcher les opérations par défaut
oEvent.preventDefault ();
var flag = silverlightControl.dragEnter (oEvent);
/ / Si nous avons géré avec succès puis arrêter la propagation de l'événement
if (drapeau)
oEvent.stopPropagation ();
}
Fonction handleDragLeave (oEvent) {
/ / Empêcher les opérations par défaut
oEvent.preventDefault ();
var flag = silverlightControl.dragLeave (oEvent);
/ / Si nous avons géré avec succès puis arrêter la propagation de l'événement
if (drapeau)
oEvent.stopPropagation ();
}
Fonction handleDragOver (oEvent) {
/ / Empêcher les opérations par défaut
oEvent.preventDefault ();
var flag = silverlightControl.dragOver (oEvent);
/ / Si nous avons géré avec succès puis arrêter la propagation de l'événement
if (drapeau)
oEvent.stopPropagation ();
}
Fonction handleDropEvent (oEvent) {
/ / Empêcher les opérations par défaut
oEvent.preventDefault ();
var flag = silverlightControl.dragDrop (oEvent);
/ / Si nous avons géré avec succès puis arrêter la propagation de l'événement
if (drapeau)
oEvent.stopPropagation ();
}
</ Script>
<! - L'utilisation d'événements JavaScript cible de dépôt pour déclencher des événements Silverlight cible de dépôt ->
ondragover= "handleDragOver(event)" id = "silverlightControl" OnDragEnter = "handleDragEnter (événement)" ondragover = "handleDragOver (événement)"
> ondragleave = "handleDragLeave (événement)" ondrop = "handleDropEvent (event)"> - DragEventArgs.Data est accessible uniquement en cas Drop. Accéder au DragEventArgs.Data DragEnter, DragOver et DragLeave peut causer SecurityException . Et d'accéder à la propriété Directory, ou DirectoryName FullName de l'objet FileInfo partir DragEventArgs.Data peut causer ArgumentNullException.
Demo App
Ci-dessous est une application de démo:
- en haut à gauche des grilles imbriquées utilisent gestionnaire d'événements baisse de cibles pour afficher les infos DragEventArgs.
- en haut à droite grilles imbriquées contenir un contrôle utilisateur ImageDropTarget, qui remplace la méthode onDrop pour rendre le fichier déposé, si c'est une image.
- la listbox du bas montre la séquence des événements cible de dépôt, leur bouillonne, et infos DragEventArgs.
vous pouvez trouver le source complet ici .
Commentaires
Alors que nous sommes ravis d'ajouter le glisser-déposer à Silverlight, nous savons qu'il ya beaucoup de choses à finir / améliorer, et ce que nous libérés est juste une version bêta. Comme toujours, vos commentaires sont très appréciés, et sera utilisé comme un point important de données pour nous aider à prioriser les travaux. Merci!









Les commentaires récents