Accueil > Silverlight > Afficher tous les API Silverlight

API Silverlight Presse-papiers

API Presse-papiers en Silverlight

Silverlight 4 ajoute un soutien Presse-papiers. Consultez les démonstrations étonnantes par Scott Guthrie et Brian Goldfarb aujourd'hui au PDC que les scénarios vitrine activée par Silveilght4 soutien Presse-papiers.

Silverlight Presse-papiers API est un sous-ensemble de WPF Presse-papiers API:

  Afficher tous les publics de classe statique 
(
public static bool ContainsText ();
public static string GetText ();
text); public static void SetText (string text);
)

Il permet de copier / coller des chaînes Unicode vers / depuis le presse-papiers du système. GetText et SetText nécessitent soit de suivre pour réussir:

  1. l'application Silverlight appelant est une application de confiance élevé, ou
  2. il est lancé et l'utilisateur l'accès utilisateur accorde presse-papiers

Pour le second cas, lorsque GetText ou SetText est d'abord fait appel à un utilisateur initié la gestion des événements, Silverlight s'ouvre une boîte de dialogue comme celui-ci (l'interface utilisateur peut changer à RTW):

    Clipboard Prompt
    Si l'utilisateur clique oui, Silverlight permettra présent et, plus tard GetText / SetText appels de réussir pour cette application au cours de cette session; si l'utilisateur clique pas, par défaut, Silverlight lancera une SecurityException . En un mot, le réglage est par demande, par session, pour les obtenir et de définir l'accès aux presse-papiers du système, et il n'est pas persisté.

API JavaScript et Presse-papiers dans WPF

Nous devons examiner de nombreux facteurs lors de la conception du Presse-papiers API pour Silverlight. Parmi eux, les API JavaScript et Presse-papiers de WPF sont particulièrement intéressantes, car nous avons besoin d'étudier les leçons de sécurité en JavaScript et essayez d'être compatible avec WPF.

Il n'ya pas de navigateur de croix, la plate-forme API JavaScript pour accéder presse-papiers. IE fournit clipboardData objet qui permet get / set / cordes claires dans le presse papier du système:

bResult = window.clipboardData.setData (sDataFormat, sData);

sData = window.clipboardData.getData (sDataFormat);

bResult = window.clipboardData.clearData (sDataFormat []);

où sDataFormat est une chaîne constante du "texte" ou "URL", sData est une chaîne, et bResult est un booléen.

La première fois que l'objet est accessible clipboadData, IE demandera à l'utilisateur pour permettre au script de presse-papiers l'accès, et le réglage est valable pour la session seulement.

WPF Presse-papiers API supporte plus et extensible format de données via IDataObject , et a aide des fonctions de formats courants tels que texte, image, audio et FileDrop .

  Afficher tous les publics de classe statique 
(
[] SecurityCritical
public static void Clear ();

public static bool ContainsAudio ();
format); public static bool ContainsData (format string);
public static bool ContainsFileDropList ();
ContainsImage public static bool ();
public static bool ContainsText ();
public static bool ContainsText (format TextDataFormat);
public static Stream GetAudioStream ();
format); publique objet statique GetData (format string);
[] SecurityCritical
public static IDataObject GetDataObject ();
public static StringCollection GetFileDropList ();
public static BitmapSource GetImage ();
public static string GetText ();
public static string GetText (format TextDataFormat);

public static bool IsCurrent (données IDataObject);

[] audioBytes); public static void SetAudio (byte [] audioBytes);
public static void SetAudio (audioStream Stream);
format, object data); public static void SetData (format string, objet de données);
[] SecurityCritical
data); public static void SetDataObject (objet de données);
[] SecurityCritical
data, bool copy); public static void SetDataObject (objet de données, copie bool);
public static void SetFileDropList (fileDropList StringCollection);
public static void setImage (image BitmapSource);
text); public static void SetText (string text);
text, TextDataFormat format); public static void SetText (texte de la chaîne, le format TextDataFormat);
)

Presse-papiers en API Windows et Mac OS X

presse-papiers de Silverlight API est finalement mis en œuvre sur le dessus du presse-papiers API du système d'exploitation sous-jacent. planchette API "Windows sont documentées sur MSDN, ci-dessous extrait donne un aperçu sur la façon de définir et obtenir les données de presse-papiers:

Cut Copy et des opérations

Pour placer l'information sur le presse-papiers, une fenêtre dégage d'abord tout le contenu du presse précédente en utilisant la EmptyClipboard fonction. Cette fonction envoie le WM_DESTROYCLIPBOARD message au propriétaire du Presse-papiers antérieurs, les ressources libère associées aux données sur le presse-papiers, et cède la propriété presse-papiers dans la fenêtre qui a ouvert le presse-papiers. Pour savoir quelle fenêtre possède le presse-papiers, appelez le GetClipboardOwner fonction.

Après avoir vidé le presse-papiers, la fenêtre des lieux des données sur le presse-papiers en tant que formats presse-papiers que possible, sur commande auprès du format Presse-papiers les plus descriptives pour le moins descriptive. Pour chaque format, la fenêtre de l'invite SetClipboardData fonction, en spécifiant l'identificateur format et une mémoire globale poignée. La mémoire poignée peut être NULL, ce qui indique que la fenêtre rend les données sur demande. Pour plus d'informations, consultez Rendu Tardive .

Coller des opérations

Pour récupérer des informations coller depuis le presse-papiers, une fenêtre détermine d'abord le format Presse-papiers pour récupérer. En règle générale, une fenêtre énumère les formats presse-papiers disponibles en utilisant les EnumClipboardFormats fonction et utilise le premier format qu'il reconnaît. Cette méthode sélectionne le meilleur format disponible en fonction de la priorité définie lorsque les données ont été mis sur le presse-papiers.

Alternativement, une fenêtre peut utiliser le GetPriorityClipboardFormat fonction. Cette fonction identifie le meilleur format de presse-papiers disponibles en fonction de la priorité spécifiée. Une fenêtre qui ne reconnaît qu'un seul format Presse-papiers peut tout simplement déterminer si ce format est disponible en utilisant le IsClipboardFormatAvailable fonction.

Après avoir déterminé le format à utiliser le presse-papiers, une fenêtre de l'invite GetClipboardData fonction. Cette fonction retourne le handle à un objet de mémoire globale contenant des données dans le format spécifié. Une fenêtre peut verrouiller brièvement l'objet de mémoire afin d'examiner ou de copier les données. Toutefois, une fenêtre ne doit pas libérer l'objet ou à laisser immobilisé pendant une longue période de temps.

Pour l'instant, Silverlight Presse-papiers API prend en charge uniquement CF_UNICODETEXT format pour copier / coller du texte Unicode vers / depuis le presse-papiers.

Mac OS X utilise carton Manager . Il est documenté à Mac Dev Center . extrait ci-dessous (avec les API ajoutée) donne un aperçu:

La demande de copie est responsable de la mise copié ou coupé des données sur la table de montage:

  1. L'utilisateur sélectionne certaines données et invoque la copie (ou couper) du menu.

  2. Si la demande ne possède pas déjà une référence à la table de montage Presse-papiers, il crée un ( PasteboardCreate ).

  3. L'application prend alors possession de la table de montage et efface le contenu actuel ( PasteboardClear ).

  4. L'application assigne les identifiants article à des données sélectionnées.

  5. Si toutes les données doit être promis, l'application doit enregistrer une fonction de rappel garde de promesse de fournir les données promises ( PasteboardSetPromiseKeeper ).

  6. L'application ajoute un ou plusieurs saveurs de chaque élément à la table de montage, y compris les données saveur soit réelle ou une promesse à chaque saveur ( PasteboardPutItemFlavor ).

La demande de réception a un ensemble légèrement différent de tâches à gérer l'action Coller:

  1. Lorsque la demande devient actif, il vérifie si la table de montage a été modifié ( PasteboardSynchronize ). Si oui, il obtient une liste des saveurs sur la table de montage. S'il ya des saveurs de l'application prend en charge, il peut permettre à son élément de menu Coller.

  2. L'utilisateur invoque l'élément de menu Coller.

  3. Les demandes d'application du point (ou articles) sur le carton dans les saveurs qui le soutient ( PasteboardGetItemCount , PasteboardGetItemIdentifier , PasteboardCopyItemFlavors , PasteboardCopyItemFlavorData ).

  4. Si les données collées doit être stockée dans un fichier, l'application réceptrice doit définir un emplacement pâte avant de demander toutes les données saveur. Dans tout autre cas, l'application réceptrice n'a pas besoin de s'inquiéter de savoir si les données pâte a été promis ou non.

Si garde de promesse à l'application de la copie est appelée, le rappel doit faire ce qui suit:

  • Si les données doivent être stockées dans un fichier, déterminer l'emplacement spécifié par coller l'application réceptrice.

  • Générer ou préparer les données pour le transfert promis.

  • Si les données ne sont pas promis à être stockés dans un fichier, ajouter de la saveur et les données à la table de montage. Dans le cas contraire, le transfert des données a promis de l'emplacement du fichier spécifié.

Quelque temps plus tard, lorsque l'application se ferme, ou quand il n'a plus besoin de la table de montage, l'application peut libérer la référence carton.

Comme sur Windows, Silverlight Presse-papiers API utilise uniquement kPasteboardClipboard et kUTTypeUTF16PlainText saveur de soutenir un copier / coller du texte Unicode vers / depuis le presse-papiers.

Réaction

Nous sommes ravis d'ajouter le support de Silverlight presse-papiers, et de voir tous les scénarios importants permis par cette simple API. Je suis intéressé à entendre vos retours, en particulier:

  • tout problème de sûreté sur la conception API Silverlight presse-papiers et la mise en œuvre
  • combien il est important d'ajouter le support pour d'autres type de données / format, et dans quel ordre de priorité
  • combien il est important de faire l'API extensible, comme le soutien IDataObject , permettant format personnalisé / saveur et le rendu retardé / données promises
    Merci!
      -Ning
      Technorati Tags: ,

      Share and Enjoy:

      • Print
      • email
      • RSS
      • Twitter
      • TwitThis
      • del.icio.us
      • LinkedIn
      • Technorati
      • Facebook
      • Google Bookmarks
      • Live
      • MySpace
      • QQ书签
      1. Décembre 19, 2009 à 11:08 | # 1

        @ Miguel
        A noté, Merci pour les commentaires!

      2. Décembre 19, 2009 à 11:08 | # 2

        @ Andrzej Rusztowicz
        A noté, Merci pour les commentaires!

      3. Novembre 29, 2009 à 16:53 | # 3

        +1 Pour soutenir l'image

      4. Novembre 26, 2009 à 00:56 | # 4

        appuyer le texte du Presse-papiers est un "must have" pour Silverlight, mais le soutien _image_ presse-papiers pourraient être fonction de Silverlight "killer", et aider les développeurs à le choisir sur Air, Flash ou JavaScript.

        simple copier / coller des captures d'écran, des émoticônes, des photos allait révolutionner de nombreux sites comme Flickr, MySpace, et des forums. Les développeurs de promouvoir la popularité Silverlight si ce n'est que de l'utiliser pour cette fonction unique, similaire à l'utilisation flash invisible pour unique "upload de fichiers multiples".

        Depuis soutien webcam est ajouté dans SL 4, c'est la prochaine étape évidente (l'utilisateur peut pointer la webcam à l'écran de "copier / coller" une capture d'écran, mais est-ce facile à utiliser?)

      1. Novembre 26, 2009 à 01:23 | # 1
      2. Décembre 30, 2009 à 08:38 | # 2