Silverlight Drag and Drop API
Einführung
Drag and Drop ist eine gemeinsame UX Paradigma und ein top gewünschte Funktion. In Silverlight 4 Beta haben wir eine Reihe grundlegender API, um die häufigste Szenario zu ziehen Bilddateien und Ablegen in einem Silverlight-Anwendungen zu ermöglichen, und entwarfen wir die API, damit wir mehr per Drag & Drop-Funktionalitäten auf der Straße, ohne API ändern aussetzen , hoffentlich.
API
Unten ist der Kern der neuen API:
namespace System.Windows
{
public abstract class UIElement: DependencyObject
{
/ / Felder
public static readonly DependencyProperty AllowDropProperty;
/ / Events
öffentliche Veranstaltung DragEventHandler DragEnter;
öffentliche Veranstaltung DragEventHandler DragLeave;
öffentliche Veranstaltung DragEventHandler DragOver;
öffentliche Veranstaltung DragEventHandler Tropfen;
/ / Eigenschaften
public bool AllowDrop {get; gesetzt;}
}
sender, DragEventArgs e); public delegate void DragEventHandler (object sender, DragEventArgs e);
public sealed class DragEventArgs: RoutedEventArgs
{
/ / Methoden
public Point GetPosition (UIElement relativeTo);
/ / Eigenschaften
öffentlichen IDataObject Data {[SecuritySafeCritical] get;}
public bool Handled {get; gesetzt;}
}
}
Namespace System.Windows.Controls
{
public abstract class Control: FrameworkElement
{
protected virtual void OnDragEnter (DragEventArgs e);
protected virtual void OnDragLeave (DragEventArgs e);
protected virtual void OnDragOver (DragEventArgs e);
protected virtual void OnDrop (DragEventArgs e);
}
}
- AllowDrop: Dies ist Abhängigkeitseigenschaft, der angibt, ob ein Element ein Drop-Ziel ist.
- DragEnter, DragLeave DragOver & Drop: Das sind Routingereignisse. Sie sprudeln, und das Feuer nur auf Elemente mit AllowDrop auf true setzen.
- OnDragEnter, OnDragLeave, OnDragOver & OnDrop: Das sind virtuelle Funktionen für Unterklassen zu überschreiben geschützt.
- DragEventArgs: Diese Klasse ermöglicht Drop-Ziel Ereignishandler oder Methode überschreibt die gezogenen Daten oder gelöscht zugreifen.
Verwendung
Es gibt hauptsächlich zwei Möglichkeiten, um Silverlight Drag & Drop-API zu verwenden:
- Silverlight-Anwendungen verarbeiten kann die Drop-Ziel Ereignisse und verarbeiten Sie die Dateien in den Event-Handler gesunken.
- Silverlight-Steuerelemente können überschreiben die Drop-Ziel virtuellen Funktionen, um die Daten per Drag & Drop Verfahren und ermöglichen sich Dropziele werden.
Einschränkungen
Die Drag & Drop-Funktionalität in Silverlight 4 Beta lieferbar ermöglicht die häufigste Szenario: Silverlight-Plugin als Datei Drop-Ziel. Bitte beachten Sie die folgenden Einschränkungen mit aktuellen Implementierung:
- gibt es keine drop-Source-Unterstützung (QueryContinueDrag & GiveFeedback).
- es gibt keine DragDropEffects oder DragDropKeyStates in DragEventArgs.
- gibt es keinen visuellen für das gezogene Objekt oder DragDropEffects.
- nur die Datei per Drag & Drop wird unterstützt durch:
- alle Drop-Ziel Ereignisse nur ausgelöst, wenn Dateien gezogen werden und fallen gelassen.
- IDataObject, DataObject und DragEventArgs.Data unterstützen nur ein Format: "FileDrop", und die Daten sind vom Typ FileInfo [].
- die meisten von IDataObject Methoden werfen NotImplementedException.
- für Drag & Drop unter Windows funktioniert, muss Silverlight Plugin windowed werden. Mit anderen Worten, wenn <param name="windowless" value="true"/> angegeben ist, wird Drop-Ereignisse nicht ausgelöst.
- Seit Silverlight-Plugin für Mac ist immer fensterlosen, müssen Sie JavaScript hook up & Drop-Ereignisse, um Silverlight & Drop-Ereignisse auslösen. Mit anderen Worten, wenn Sie die Silverlight-Anwendung in eine Datei Tropfen auf Mac als auch Windows unterstützen wollen, müssen Sie folgende Skript und Silverlight-Plugin Attribute, um die Hosting-html-oder ASPX-Seite hinzu:
<-! Fügen Sie folgende Skript vor Ende des HEAD-Tag ->
<script type= "text/javascript">
Funktion handleDragEnter (oEvent) {
/ / Prevent default Operationen
oEvent.preventDefault ();
var flag = silverlightControl.dragEnter (oEvent);
/ / Wenn wir behandelt sie erfolgreich beenden Sie dann Ausbreitung der Veranstaltung
if (flag)
oEvent.stopPropagation ();
}
Funktion handleDragLeave (oEvent) {
/ / Prevent default Operationen
oEvent.preventDefault ();
var flag = silverlightControl.dragLeave (oEvent);
/ / Wenn wir behandelt sie erfolgreich beenden Sie dann Ausbreitung der Veranstaltung
if (flag)
oEvent.stopPropagation ();
}
Funktion handleDragOver (oEvent) {
/ / Prevent default Operationen
oEvent.preventDefault ();
var flag = silverlightControl.dragOver (oEvent);
/ / Wenn wir behandelt sie erfolgreich beenden Sie dann Ausbreitung der Veranstaltung
if (flag)
oEvent.stopPropagation ();
}
Funktion handleDropEvent (oEvent) {
/ / Prevent default Operationen
oEvent.preventDefault ();
var flag = silverlightControl.dragDrop (oEvent);
/ / Wenn wir behandelt sie erfolgreich beenden Sie dann Ausbreitung der Veranstaltung
if (flag)
oEvent.stopPropagation ();
}
</ Script>
<-! Verwenden JavaScript Drop-Ziel Ereignisse Silverlight Drop-Ziel Ereignisse auslösen ->
type= "application/x-silverlight-2" width= "100%" height= "100%" <Object data = "data: application/x-silverlight-2," type = "application/x-silverlight-2" width = "100%" height = "100%"
ondragover= "handleDragOver(event)" id = "silverlightControl" OnDragEnter = "handleDragEnter (event)" OnDragOver = "handleDragOver (event)"
> OnDragLeave = "handleDragLeave (event)" ondrop = "handleDropEvent (event)"> - DragEventArgs.Data ist nur zugänglich, in Drop-Event. Zugriff auf DragEventArgs.Data in DragEnter, DragOver und DragLeave kann SecurityException . Und den Zugriff auf Directory, DirectoryName oder FullName Eigenschaft des FileInfo-Objekt aus DragEventArgs.Data kann ArgumentNullException.
Demo App
Unten finden Sie eine Demo-Anwendung:
- Oben links Netzschachtelung Verwendung Drop-Ziel-Ereignishandler DragEventArgs Info-Display.
- oben rechts Netzschachtelung enthalten ImageDropTarget Benutzersteuerelement, das OnDrop Methode überschreibt, um die abgelegte Datei machen, wenn es ein Bild ist.
- die untere Listenfeld zeigt die Reihenfolge der Drop-Ziel Ereignisse, die sprudeln und DragEventArgs info.
Sie können den kompletten Quellcode finden Sie hier .
Rückkopplung
Während wir freuen uns sehr, Drag & Drop, um Silverlight Add wissen wir, es gibt eine Menge zu beenden / zu verbessern, und was wir veröffentlicht ist nur eine Beta. Wie immer ist Ihr Feedback sehr geschätzt und wird als ein wichtiger Datenpunkt verwendet werden, die uns helfen Priorisierung der Arbeit. Vielen Dank!









Recent Comments