Archivo

Archive for Noviembre, 2009

Silverlight arrastrar y soltar API

28 de noviembre 2009 13 comentarios

Introducción

Arrastrar y soltar es un paradigma común UX y una función más solicitados. En Silverlight 4 Beta, hemos introducido un conjunto básico de API para permitir que el escenario más común de archivos de imágenes arrastrando y soltando a las aplicaciones de Silverlight, y hemos diseñado la API que nos permite exponer más funcionalidades de arrastrar y soltar en el camino sin cambio API , es de esperar.

API

A continuación se muestra el núcleo de la nueva API:

 espacio de nombres System.Windows 
{
UIElement público clase abstracta: DependencyObject
{
/ / Campos
estáticos públicos de sólo lectura DependencyProperty AllowDropProperty;

/ / Eventos
Evento público DragEnter DragEventHandler;
eventos públicos DragEventHandler DragLeave;
público evento DragOver DragEventHandler;
acto público caída DragEventHandler;

/ / Propiedades
pública AllowDrop bool {get; set;}
}

sender, DragEventArgs e); Delegado público DragEventHandler void (object sender, DragEventArgs e);

públicos cerrados DragEventArgs clase: RoutedEventArgs
{
/ / Métodos
GetPosition Punto pública (UIElement relativeTo);

/ / Propiedades
pública IDataObject datos {[SecuritySafeCritical] get;}
public bool manejado {get; set;}
}
}

System.Windows.Controls espacio de nombres
{
control público clase abstracta: FrameworkElement
{
virtual protegido vacío OnDragEnter (DragEventArgs e);
virtual protegido vacío OnDragLeave (DragEventArgs e);
OnDragOver void virtual (DragEventArgs e);
ondrop void virtual (DragEventArgs e);
}
}

  • AllowDrop: es propiedad de dependencia, que indica si un elemento es un destino de colocación.
  • DragEnter, DragLeave, DragOver & Drop: estos eventos se dirigen. Que brotan, y el fuego sólo en los elementos con el conjunto de AllowDrop en true.
  • OnDragEnter, OnDragLeave, OnDragOver y ondrop: se trata de funciones virtuales protegidas por las subclases para anular.
  • DragEventArgs: esta clase permite colocar controladores de eventos de destino o invalida el método para acceder a los datos que se arrastran o se quita.

Uso

Existen principalmente dos formas de utilizar Silverlight arrastrar y soltar API:

  • Las aplicaciones de Silverlight pueden manejar los eventos de destino de colocación y el proceso de archivos colocados en los controladores de eventos.
  • Controles de Silverlight puede anular esas funciones destino de colocación virtual para procesar los datos que arrastrar y soltar, y permitir a sí mismos como blancos de la gota.

Limitaciones

La funcionalidad de arrastrar y soltar enviado en Silverlight 4 Beta sólo permite que el escenario más común: plugin de Silverlight como un destino de colocación de archivos. Por favor, observe las siguientes limitaciones en la aplicación actual:

  • no hay soporte de fuentes de gota (QueryContinueDrag y GiveFeedback).
  • no hay DragDropEffects o DragDropKeyStates en DragEventArgs.
  • no hay visual del objeto arrastrado o DragDropEffects.
  • sólo arrastrar y soltar el archivo es compatible con:
    • todos los eventos de destino de colocación de fuego sólo cuando los archivos están siendo arrastrados y soltados.
    • IDataObject, DataObject y DragEventArgs.Data apoyar un solo formato: "FileDrop", y los datos son de tipo FileInfo [].
  • la mayoría de los métodos IDataObject lanzar NotImplementedException.
  • para arrastrar y soltar para trabajar en Windows, plugin de Silverlight debe ventana. En una palabra, si <param name="windowless" value="true"/> se especifica, los eventos de caída no se disparará.
  • desde Silverlight plugin en Mac siempre sin ventanas, es necesario conectar los eventos de JavaScript gota a gota desencadenar eventos de Silverlight. En una palabra, si desea que la aplicación Silverlight para apoyar caída de archivos en Mac como en Windows, tendrá que agregar secuencias de comandos y atributos siguientes Silverlight plug-in para el hosting html o aspx:
     <-! Agregar secuencias de comandos siguientes antes de final de la etiqueta HEAD -> 
    <script type= "text/javascript">
    función handleDragEnter (oEvent) {
    / / Evitar las operaciones por defecto
    oEvent.preventDefault ();

    var flag = silverlightControl.dragEnter (oEvent);

    / / Si se manejan con éxito y luego se detiene la propagación del evento
    if (flag)
    oEvent.stopPropagation ();
    }

    función handleDragLeave (oEvent) {
    / / Evitar las operaciones por defecto
    oEvent.preventDefault ();

    var flag = silverlightControl.dragLeave (oEvent);

    / / Si se manejan con éxito y luego se detiene la propagación del evento
    if (flag)
    oEvent.stopPropagation ();
    }

    función handleDragOver (oEvent) {
    / / Evitar las operaciones por defecto
    oEvent.preventDefault ();

    var flag = silverlightControl.dragOver (oEvent);

    / / Si se manejan con éxito y luego se detiene la propagación del evento
    if (flag)
    oEvent.stopPropagation ();
    }

    función handleDropEvent (oEvent) {

    / / Evitar las operaciones por defecto
    oEvent.preventDefault ();

    var flag = silverlightControl.dragDrop (oEvent);

    / / Si se manejan con éxito y luego se detiene la propagación del evento
    if (flag)
    oEvent.stopPropagation ();
    }
    </ Script>
    <- El uso de JavaScript acontecimientos destino de colocación para desencadenar eventos de Silverlight caída de destino ->

    ondragover= "handleDragOver(event)" id = "silverlightControl" ondragenter = "handleDragEnter (evento)" ondragover = "handleDragOver (evento)"
    > ondragleave = "handleDragLeave (evento)" ondrop = "handleDropEvent (evento)">

  • DragEventArgs.Data sólo se puede acceder en caso de caída. Acceso a DragEventArgs.Data en DragEnter, DragOver y DragLeave puede causar SecurityException . Y acceso a la propiedad de directorio, o DirectoryName FullName del objeto FileInfo de DragEventArgs.Data puede causar ArgumentNullException.

    Demo de la aplicación

    A continuación se muestra una aplicación de demostración:

  • la parte superior izquierda rejillas anidadas uso destino de colocación controlador de eventos para mostrar la información DragEventArgs.
  • la parte superior derecha rejillas anidadas contienen un control de usuario ImageDropTarget, lo que invalida el método ondrop para hacer que el archivo bajado si se trata de una imagen.
  • el cuadro de lista inferior muestra la secuencia de eventos de destino de colocación, sus burbujas, y DragEventArgs información.

    Click to run DragDropDemo if you have Silverlight 4 Beta installed.

    usted puede encontrar el código fuente completo aquí .

    Realimentación

    Si bien estamos muy contentos de añadir arrastrar y soltar para Silverlight, sabemos que hay mucho para terminar / mejorar, y lo dimos a conocer es sólo una versión beta. Como siempre, sus comentarios son muy apreciados, y se utilizará como punto de información importante para ayudarnos a priorizar el trabajo. Gracias!

    Technorati Tags: ,