Clipboard et Drag & Drop Silverlight 4.0

19. October 2010 by Julien.SILVAIN

 

 

Le clipboard et le drag and drop sont des nouvelles fonctionnalités arrivées avec la version 4 de Silverlight.

Ici ces nouveautés permettent de faciliter la maniabilité et la fonctionnalité du Silverlight 4.0.

Ci-dessous vous pouvez observer le code nécessaire au bon fonctionnement de ces nouvelles fonctionnalités.

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Net;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Animation;

using System.Windows.Shapes;

using System.Windows.Media.Imaging;

 

namespace _04_ClipboardAndDragDrop

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

        }

 

        private void OnCopy(object sender, RoutedEventArgs e)

        {

            Clipboard.SetText(copyPasteBox.Text);

        }

 

        private void OnPaste(object sender, RoutedEventArgs e)

        {

            copyPasteBox.Text = Clipboard.GetText();

        }

 

        private void OnDragEnter(object sender, System.Windows.DragEventArgs e)

        {

                   

        }

 

        private void OnDragOver(object sender, System.Windows.DragEventArgs e)

        {

                   

        }

 

        private void OnDrop(object sender, System.Windows.DragEventArgs e)

        {

                    if(e.Data.GetDataPresent(DataFormats.FileDrop))

                    {

                           e.Handled = true;

                var files = e.Data.GetData(DataFormats.FileDrop) as IEnumerable<System.IO.FileInfo>;

                if (files == null)

                    return;

 

                foreach (var file in files)

                {

                    try

                    {

                        var img = new BitmapImage();

 

                        img.SetSource(file.OpenRead());

                        wrapPanel.Children.Add(new Image { Source = img, MaxWidth = 150, Margin = new Thickness(4) });

                    }

                    catch

                    {

                    }

                }

             }

        }

    }

}

 

Pour copier le texte rentré dans la TextBox il suffit juste d’appeler la méthode « SetText » de l’objet Clipboard.

private void OnCopy(object sender, RoutedEventArgs e)

{

     Clipboard.SetText(copyPasteBox.Text);

}

 

Le résultat ainsi obtenu est présenté ci-dessous.

 

 

Il en est de même pour coller une sélection avec la méthode GetText().

private void OnPaste(object sender, RoutedEventArgs e)

{

     copyPasteBox.Text = Clipboard.GetText();

}

 

Cette nouvelle fonctionnalité n’a pas vraiment d’utilité étant donné que le très célèbre « CTRL+C » et  « CTRL+V » fonctionne parfaitement ! Mais dans le futur qui sait ? Peut être que cette nouveauté sera très utilisée dans une application donnée.

 

En ce qui concerne le Drag & Drop, ce contrôle est encore assez limité. En effet il nous est impossible de revenir en arrière du moment que le Drag & Drop est déjà effectué.

 


Comme le screenshot du dessus nous le montre, cette nouvelle fonctionnalité nous permet d’importer tout simplement des fichiers dans une application Silverlight 4.0 grâce à un simple glissé-déposer.

Cette fonctionnalité pourrait tout à fait être implémentée sur une plateforme de rendu de projet ou bien sûr, comme présenté dans l’exemple, être intégrée dans une application visant à l’upload de fichiers.

 

 

En conclusion, nous pouvons dire que de par ces nouvelles fonctionnalités, Silverlight exprime sa volonté d’améliorer son interface avec les utilisateurs. Certainement pour viser un public moins averti qui aime bien les applications faciles d’utilisation et attrayantes.

 

 

C#, Silverlight, Visual Studio 2010

Accéder aux fichiers locaux en Silverlight 4.0

18. October 2010 by Julien.SILVAIN



L'un des points de faiblesses de silverlight 3.0 comparé a ses concurents était de ne pas povoir accéder a ses fichiers locaux directement a partir de l'application silverlight 3.0. Désormais, Grâce à la nouvelle version de silverlight (silverlight 4.0) tout cela est maintenant possible.



Cette nouveauté se résume à une méthode : « Environment.GetFolderPath » qui nous permet de récupérer le répertoire du chemin désiré. Dans le cas opposé, si l’on veut énumérer tous les fichiers contenus dans un répertoire, nous avons la méthode :  « Directory.EnumerateFiles »


using System;

using System.Collections.Generic;

using [...]

 

namespace APILocalFiles

{

    public partial class MainPage : UserControl

    {

        public MainPage()

        {

            InitializeComponent();

        }

 

        private void OnEnumerateLocaFiles(object sender, RoutedEventArgs e)

        {

            List<string> photosInFolder = new List<string>();

 

            var photos = Directory.EnumerateFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures));

 

            foreach (var item in photos)

            {

                photosInFolder.Add(item);

            }

 

            lbPhotos.ItemsSource = photosInFolder;

        }

    }

}


Ici il est créé une méthode permettant d’énumérer tous les fichiers et dossiers contenus dans le répertoire indiqué en paramètre.

La boucle foreach permet ici d’ajouter chaque élément énuméré à la liste de chaine de caractère créée au début.



Après compilation on obtient la fenêtre ci-dessus.

Cependant si l’on clique sur « Enumerate Local Files » Visual Studio nous sort une exception présentée ci-dessous. En effet, pour que cette nouvelle API fonctionne correctement, il faut absolument que l’application s’exécute en dehors du navigateur et en mode plus de privilège.




Pour palier à cette exception il suffit d’aller dans les propriétés de l’application silverlight et cocher les lignes suivantes :

            -« Enable running application out of browser »



-« Require elevated trust when running outside the browser » après avoir cliqué sur « Out-of-Browser Settings… »



Ensuite on relance l’application et là, à l’aide d’un clic droit, on installe l’application sur l’ordinateur.

En effet, l'accés aux fichiers locaux se fait en Out Of Browser (OOB)

De plus, si par exemple nous voulons implanter cette fonctionalité dans une application utilisée par de nombreuses personnes, ces dernieres devront toutes installer cette application en "local" sur leurs machines. Ce dernier point peut à la fois etre un avantage et un inconvénient.



Une fois cette application installée, si l’on clique sur « enumerate files » la liste des dossiers et documents contenus dans le répertoire est affichée, comme cela nous est détaillé ci-dessous :



Nous pouvons dés-lors affirmer que par cette nouveauté ainsi que bien d'autres non citées ici, silverlight 4.0 exprime bien sa volonté de revenir au contact de ses principaux concurents tel que le flash.

Bien évidemment a l'heure où est écrit cet article la version 4 de Silverlight n'est aps une réelle nouveauté. De plus avec la sortie de la version 5 de HTML, cette derniere tend à faire oulier silverlight.


Attendons de voir la version 5 de Silverlight qui s'annoce assez intérésente :)

 

C#, Silverlight, Visual Studio 2010