2012-04-10 6 views
0

J'ai trouvé comment analyser par programme/charger une chaîne XAML à l'aide de XamlReader.Load(), mais si un utilisateur faisait glisser/déposer un fichier ".xaml" sur mon application Silverlight, comment procéderais-je pour analyser fichier dans un fichier XAML et la lecture dans le contenu sous la forme d'une chaîne pour servir jusqu'à la méthode XamlReader.Load().Silverlight: ouvrir et lire par programmation le fichier XAML?

Ou y a-t-il une manière plus efficace/meilleure d'utiliser la réflexion? Je voudrais permettre à l'utilisateur d'utiliser un concepteur argenté "silverlight for dummies" (dans la limite du raisonnable) pour concevoir un contrôle simple. (c'est-à-dire une étiquette et une zone de texte). Ensuite, enregistrez-le ou exportez-le en tant que fichier XAML (ou peut-être je peux simplement les enregistrer en tant que fichier TXT?) Ensuite, ils déposeraient ce fichier dans mon application Silverlight et il analyserait le texte dans un XamlReader.Load(), puis je peux ajouter mon nouvel objet créé par programme à une zone de liste.

J'ai la logique de fichiers par glisser/déposer et pour charger la chaîne XAML, mais ce point central d'obtenir le contenu d'un fichier « XAML » est ce que je me confondant sur ...

EDIT

@nicholas, c'est exactement ce que je suis allé avec. Je ne sais pas ce qui se passait hier, mais je pense que je viens d'avoir un gros «cerveau-pet». Voilà comment je fini par aller: (ont encore un nettoyage et refactoring, mais ce fut à tester)

 IDataObject data = e.Data; 
     if (data.GetDataPresent(DataFormats.FileDrop)) 
     { 
      FileInfo[] files = data.GetData(DataFormats.FileDrop) as FileInfo[]; 

      if (files.Length > 1) 
      { 
       //TODO 
      } 
      else 
      { 
       FileInfo file = files[0]; 
       extension = file.Extension; 
       string xaml = string.Empty; 
       using (Stream stream = file.OpenRead()) 
       { 
        xaml = StreamUtils.StreamToString(stream); 
       } 
       if (!xaml.IsEmpty()) 
       { 
        try 
        { 
         myListBox.Items.Add(XamlReader.Load(xaml); 
        } 
        catch (Exception ex) 
        { 
         //TODO 
        } 
       } 
      } 

Répondre

2

Vous avez donc un gestionnaire d'événements Drop, à partir duquel vous recevez des arguments d'événement avec la propriété Data, un IDataObject. De MSDN vous trouvez comment obtenir un FileStream pour le fichier déposé, que vous pouvez ensuite charger dans une chaîne (par exemple utiliser StreamReader) pour être analysé par XamlReader.Load().

1

Si je vous ai bien compris, il y aura trois étapes différentes:

  • Parse la le contenu du fichier XAML ou tout autre type de fichier dans une « chaîne » (il peut être un fichier txt ou tout autre format)
  • Utilisez XamlReader.Load() pour générer un élément d'interface utilisateur de cette chaîne de l'étape 1
  • Insérez l'élément d'interface utilisateur de l'étape 2 dans la collection ListBox.Items

Cela vous aide-t-il?

Questions connexes