Les nouveautés de Silverlight 4

Version 1.2

Julien Dollon http://blogs.dotnet-france.com/juliend

2

Silverlight 4.0 béta 1 v. 1.0 [26/11/09]

Sommaire

1

Introduction ..................................................................................................................................... 4 1.1 1.2 1.3 1.4 Historique des versions ........................................................................................................... 4 Se former à Silverlight 2 et 3 ................................................................................................... 4 Télécharger les outils............................................................................................................... 5 Les sources utilisées pour ma recherche................................................................................. 5

2

Améliorations générales.................................................................................................................. 6 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 Meilleur support des navigateurs & Performances ................................................................ 6 Le clic droit de la souris ........................................................................................................... 6 Du contenu riche ..................................................................................................................... 6 Globalisation............................................................................................................................ 7 Les impressions ....................................................................................................................... 7 Drag and drop de l’OS à l’application Silverlight ..................................................................... 8 Validation ................................................................................................................................ 9 Détection du clavier .............................................................................................................. 10 Compatibilité avec les assemblies .NET................................................................................. 11 Amélioration du support des services ................................................................................... 13 Les commandes pour le pattern MVVM ............................................................................... 14 Amélioration de la navigation de page ................................................................................. 14

3

Amélioration de l’OOB................................................................................................................... 16 3.1 Les applications « Sandboxed »............................................................................................. 16 Introduction ................................................................................................................... 16 Gérer la taille, position et aspect de vos fenêtre Silverlight 4 ...................................... 16 Les notifications............................................................................................................. 17 Héberger du contenu HTML .......................................................................................... 17

3.1.1 3.1.2 3.1.3 3.1.4 3.2

Les applications de confiances .............................................................................................. 19 Introduction ................................................................................................................... 19 Accès au système de fichiers ......................................................................................... 21 Interopérabilité COM .................................................................................................... 22

3.2.1 3.2.2 3.2.3 4

Le multimédia ................................................................................................................................ 23 Dotnet France Association

3

Silverlight 4.0 béta 1 v. 1.0 [26/11/09] 4.1 4.2 4.3 4.4 4.5 4.6 5 6 7 Support de la webcam et du micro ....................................................................................... 23 Mise en place du SmoothStreaming ..................................................................................... 24 Silverlight Media Framework ................................................................................................ 24 WMS Multicast ...................................................................................................................... 26 Offline DRM ........................................................................................................................... 26 Meilleur support du multitouch .................................................. Erreur ! Signet non défini.23

MEF (Managed Extensibility Framework) ..................................................................................... 27 WCF RIA Services ........................................................................................................................... 27 Annexe ........................................................................................................................................... 30 7.1 7.2 7.3 SDK Facebook ........................................................................................................................ 30 BigMap................................................................................................................................... 31 Silverlight Toolkit ................................................................................................................... 31

Dotnet France Association

0 [26/11/09] 1 Introduction A l’occasion de la PDC 09. Dotnet-France met à disposition des cours gratuits : Silverlight 2 :     Introduction à Silverlight Les Contrôles Customisation Gestion d’évènement et Commandes Dotnet France Association . Actuellement la version est la Bêta 1 et 45% des ordinateurs dans le monde ont installé au moins Silverlight 2 (contre 98% pour Flash). 1. 1.1 Historique des versions Notez qu’entre la version 1 et 2 de Silverlight la CLR est différente. Cette nouvelle version de Silverlight s’appuie sur la version 3 et améliore celle-ci sur plusieurs plans (ajout de composants & fonctionnalités). il convient de maitriser Silverlight 2 et 3.4 Silverlight 4.0 béta 1 v. Microsoft a mis en ligne le 19 Novembre 2009 la nouvelle version en bêta de Silverlight.2 Se former à Silverlight 2 et 3 Avant d’attaquer Silverlight 4. Silverlight 4 par exemple peut exécuter du Silverlight 2 et 3 mais pas la version 1. Pour cela. 1.

Framework ou logiciel pour Silverlight 4.0 [26/11/09]  Les animations Pour Silverlight 3 je vous conseille le livre blanc que j’ai écrit disponible ici.4 Les sources utilisées pour ma recherche Pour écrire ces quelques pages je me suis appuyé avant tout sur les sessions de l’événement PDC de Microsoft.3 Télécharger les outils Avant de commencer ce tutorial il faut vous munir des différents SDK. Ainsi que des articles sur channel 9 et Tim Heuer.        Silverlight 4 SDK WCF RIA Services Blend 3 Preview for . Dotnet France Association .0 béta 1 v. 1.NET 4 Silverlight 4 Documentation Silverlight 4 Toolkit Visual Studio 2010 Beta 2 Silverlight 4 Training Course Offline Download 1.5 Silverlight 4. 1.

On peut copier des éléments riches d’office. private void Button_MouseRightButtonUp(object sender.com">Click Here</Hyperlink> <LineBreak/> <InlineUIContainer> <Button Content="Click Me !" Height="30" /> </InlineUIContainer> <LineBreak /> Dotnet France Association .0 [26/11/09] 2 Améliorations générales 2. MouseButtonEventArgs e) { } 2. Ce contrôle peut contenir du contenu riche tel que du texte avec différente police. une vidéo ou tout autre contrôle.6 Silverlight 4. Il est mis à la disposition du développeur des événements MouseRightButtonUp et MouseRightButtonDown que nous pouvons utiliser pour afficher/cacher un conteneur. de page web… RichTextArea manquait cruellement aux applications d’entreprise et il fallait souvent contourner le problème en achetant un contrôle payant.3 Du contenu riche Un nouveau contrôle s’est ajouté à la toolbar de Visual Studio : RichTextArea.1 Meilleur support des navigateurs & Performances Microsoft annonce le support du navigateur google Chrome© en résolvant certains bugs d’affichages et améliore les performances de Silverlight :    Les applications s’ouvrent 30% plus vite qu’en Silverlight 3 Les applications s’exécutent 100% plus vite qu’en Silverlight 3 Toujours seulement 10 secondes pour installer le plug in 2. Exemple : <RichTextArea IsReadOnly="True"> <Paragraph FontFamily="Arial" FontSize="36" FontWeight="Bold" TextAlignment="Center" TextDecorations="Underline"> Hello Word <LineBreak /> <Hyperlink NavigateUri="http://microsoft. 1.2 Le clic droit de la souris En Silverlight 2 ou 3. nous utilisions l’injection JavaScript dans notre DOM pour capturer le clic droit de la souris et ouvrir un menu contextuel. une image.0 béta 1 v.

5 Les impressions Silverlight 3 a apporté une classe appelée WriteableBitmap qui aide les développeurs à contourner le problème du non gestion des impressions.الكسول‬ Content="‫الكلب فوق السريع الب ين الثعلب قفز‬ 2. print. Par exemple ce bouton sera correctement interprété : <Button Content="‫>/".. } Dotnet France Association . 1.4 Globalisation 30 nouvelles langues sont supportées (l’arabe.StartPrint += print_StartPrint.) ainsi que le support bi-directionnel. <Button FlowDirection="LeftToRight" ‫>/". deux techniques sont possibles : réaliser un screen d’un composant de votre IHM ou générer un état indépendant du contrôle le représentant. Exemple avec l’impression de la fenêtre courante : private PrintDocument print.0 béta 1 v.الكسول الكلب فوق السريع الب ين الثعلب قفز‬ L’utilisation de FlowDirection sur n’importe quel contrôle nous permet d’écrire de gauche à droite ou de droite à gauche (par défaut).0 [26/11/09] </Paragraph> </RichTextArea> 2. print. Ce processus est amélioré dans Silverlight 4 en proposant l’accès à Print Document Dialog Pour vos impressions. public MainPage() { // Required to initialize variables InitializeComponent(). le thaï.EndPrint += print_EndPrint. print.PrintPage += print_PrintPage.7 Silverlight 4. print = new PrintDocument().

Show("Début d'impression"). StartPrint/EndPrint qui interviennent au début et à la fin de l’impression. } void print_EndPrint(object sender. 2.Show("Fin d'impression"). PrintPage permet de fournir les données à imprimer (ne pas oublier de mettre e.HasMorePage à faux pour éviter les boucles infinies). } void print_PrintPage(object sender.0 béta 1 v. 1. RoutedEventArgs e) { print.0 [26/11/09] private void Button_Click(object sender. EndPrintEventArgs e) { MessageBox.6 Drag and drop de l’OS à l’application Silverlight Que l’on soit en OOB (Out Of Browser) ou pas. } void print_StartPrint(object sender.HasMorePages = false. Dotnet France Association . e. Silverlight 4 supporte le drag and drop de l’OS vers nos applications.Print(). StartPrintEventArgs e) { MessageBox.PageVisual = this. } La méthode Print du PrintDocument lance un PrintDialog comme ci-dessous : Il existe plusieurs événements pour savoir où en est l’impression. PrintPageEventArgs e) { e.8 Silverlight 4.

sourceImage. La propriété Error doit être utilisée pour par exemple créer un ErrorSummary en fin de formulaire.OpenRead()).Data.Extension). img.Name). INotifyPropertyChanged { private string nom. } 2. Cela permet de faire la gestion d’erreur dans un accesseur à part.9 Silverlight 4.0 béta 1 v. l’expérience utilisateur est accrue et la barrière entre application RIA (Rich Internet Application) et RDA (Rich Desktop Application) s’affine de plus en plus.Source = sourceImage. 1. Exemple avec une classe Client : public class Client : IDataErrorInfo.Show(item. L’événement est soulevé à chaque modification de position de la souris AllowDrop : Propriété à mettre à vrai si on souhaite utiliser le Drag and Drop <Grid x:Name="LayoutRoot" Background="White" AllowDrop="True" Drop="img_Drop"> <Image x:Name="img" /> </Grid> private void img_Drop(object sender.7 Validation En Silverlight 3. DragEventArgs e) { FileInfo[] fichiers = (FileInfo[])e.SetSource(fichiers[0].0 [26/11/09] Fini les boutons « Parcourir » pour télécharger un fichier ou ouvrir un document. Plusieurs événements et une propriété font leurs apparitions :      Drop : Evénement qui se déclenche lorsqu’on dépose un objet sur le contrôle DragEnter : Evénement qui se déclenche lorsque la souris passe sur le contrôle avec un objet à glisser-déposer DragLeave : Evénement qui se déclenche lorsque la souris quitte le contrôle sans avoir lâché l’objet DragOver : Evénement qui se déclenche lorsque la souris est au-dessus du contrôle avec un objet à déposer. IDataErrorInfo force le binding à utiliser un accesseur « this[] » pour parcourir les propriétés.FileDrop). public string Nom Dotnet France Association .GetData(DataFormats. foreach (var item in fichiers) { MessageBox. } //On affiche le premier fichier BitmapImage sourceImage = new BitmapImage(). nous avions à notre disposition une nouvelle gestion d’erreur venant tout droit du Silverlight Toolkit qui consistait à soulever des exceptions côté classe métier et d’afficher un message d’erreur dans l’IHM.Show(item. Silverlight 4 améliore cette gestion d’erreur en proposant deux nouvelles interfaces IDataErrorInfo et INotifyDataErrorInfo. MessageBox.

Resources> <Grid x:Name="LayoutRoot" Background="White"> <TextBox Text="{Binding Source={StaticResource client}.190. ValidatesOnDataErrors=True}" Margin="270. détecter des tableaux venant d’Excel ou d’un document Word qui seraient stockés dans le presse-papier. Mode=TwoWay.0 béta 1 v.PropertyChanged != null) PropertyChanged(this. } } #region IDataErrorInfo Members public string Error { get { return "". } #endregion } Déclaration de la ressource et Binding : <UserControl. par exemple.Path=Nom. L’utilisation se fait de manière très simple avec les méthodes statiques de la classe Clipboard : Dotnet France Association .0 [26/11/09] { get { return nom. } } #endregion #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged.8 Détection du clavier L’accès au clavier couplé aux contrôles permettant de faire du texte riche peut être très intéressant. } set { nom = value. return null.Resources> <assembly:Client x:Key="client" Nom="Name"/> </UserControl.nom)) return "Nom vide". Nous pouvons. } } public string this[string columnName] { get { if (columnName.10 Silverlight 4.IsNullOrEmpty(this. public void OnPropertyChanged(string name) { if(this.191. 1. new PropertyChangedEventArgs(name)).Equals("Nom") && String.253" /> </Grid> Résultat : 2. OnPropertyChanged("Nom").

NET et Silverlight (System. 1.0 [26/11/09] 2. Dans l’exemple qui suit.NET.NET La création d’applications Silverlight nécessite souvent un développement parallèle à celui du développement du backoffice en . Cette portabilité est réalisée en compilant l’assembly grâce aux Silverlight Tools et en vérifiant que le projet compilé utilise bien des APIs portables en .NET puisque l’environnement d’exécution n’est pas le même dans les deux technologies. A noter que le client . Mscorlib. Création de la librairie Silverlight Dotnet France Association . Création du client WPF 2. On peut maintenant rendre compatible des librairies Silverlight avec du code .NET ne nécessitera pas l’installation du plug in Silverlight sur le poste.0 béta 1 v.NET et ainsi réaliser un gain de temps lors du développement/Maintenance des applications. System.Core…).11 Silverlight 4. je vais créer une librairie Silverlight que je vais référencer dans un projet .9 Compatibilité avec les assemblies . 1.

0 béta 1 v. 1.0 [26/11/09] 3. Ajout de la référence (en utilisant Browse plutôt que Projects qui provoque une erreur) Dotnet France Association .12 Silverlight 4.

beaucoup se pose la question du choix de la technologie à utiliser pour leurs développements RDA. } Si vous souhaitez vous renseigner sur comment réaliser un service WCF sécurisé avec des clients credentials rendez-vous sur mon blog.0 [26/11/09] 2.Add(new Client()). WebRequestCreator. Qui n’a jamais eu de problème avec les FaultExceptions (corrigé avec Silverlight 3) ou l’authentification des ClientsCredentials ? Beaucoup de choses manquent à l’appel pour nos applications Silverlight.0 béta 1 v.UseDefaultCredentials = false.Result). Une astuce à noter également dans les améliorations de communication avec les services : Les ObservableCollection peuvent s’initialiser avec un type IList ou IEnumerable en paramètre. La version 4 corrige certains manques tels que le support d’UDP multicast ou de l’authentification avec la classe ClientHttpWebRequest.13 Silverlight 4. client.Show(e.svc/DoWork")).Credentials = new NetworkCredential("julien".RegisterPrefix("http://".DownloadStringCompleted += new DownloadStringCompletedEventHandler(client_DownloadStringCompleted). client. WebClient client = new WebClient(). L’utilisation de ce type d’authentification rend compatible Silverlight avec les services sécurisés de type WCF/WCF Data Services voir même des services Live ou Twitter sans passer par un service proxy « maison ». client.ClientHttp). maliste.DownloadStringAsync(new Uri("http://localhost:15980/Service1. L’une des nombreuses différences entre WPF est Silverlight est que la CLR Silverlight s’apparente à un « framework. List<Client> maliste = new List<Client>(). ObservableCollection<Client> collection = new ObservableCollection<Client>(maliste).NET allégé » qui a de nombreuses limites. WebRequest. 1. Dotnet France Association . } void client_DownloadStringCompleted(object sender. Ce qui nous évite de réaliser à la main la boucle foreach quand un service nous renvoie un tableau de données. Voici le code côté client Silverlight pour interroger un service WCF de type webhttpbinding : public MainPage() { InitializeComponent(). "dollon").10 Amélioration du support des services Depuis l’arrivée de Silverlight 4. L’une de ces limites est le support des services. client. DownloadStringCompletedEventArgs e) { MessageBox.

} public void CancelLoad(IAsyncResult asyncResult) { throw new NotImplementedException(). Cette propriété va nous permettre de créer notre propre classe héritant de l’interface INavigationContentLoader afin de pouvoir gérer le chargement des pages nous-même. public class MyContentLoader : INavigationContentLoader { #region INavigationContentLoader Members public IAsyncResult BeginLoad(Uri targetUri. Uri currentUri. La nouveauté dans Silverlight 4 réside dans le fait que l’utilisation de l’attribut Command dans un bouton est gérée nativement. La partie View contient votre interface graphique XAML avec le moins de code C# possible puisque la logique de votre application est déportée dans la partie ViewModel grâce au Binding. aux Commands et aux notifications. } public LoadResult EndLoad(IAsyncResult asyncResult) Dotnet France Association . Je faisais déjà allusion d’un futur proche ou j’imaginais toutes les possibilités que cela ouvre pour Silverlight (pattern MVC. je vous exposais l’une des nouveautés qui était : la navigation entre les pages. Uri currentUri) { throw new NotImplementedException().0 béta 1 v. ElementName=slider}"/> 2. Voici un exemple de code MVVM réalisé en Silverlight 3 (code).12 Amélioration de la navigation de page Dans mon white paper sur la version 3 de Silverlight. proxy WCF ou DomainContext.14 Silverlight 4. <Button Command="{Binding MyCmd}" CommandParameter="{Binding Path=Value. AsyncCallback userCallback.0 [26/11/09] 2. Cette fonctionnalité permettant une meilleure construction de l’IHM ainsi que la possibilité pour le client d’avoir un historique de navigation et une URL de type « permalink ».11 Les commandes pour le pattern MVVM Model-View-ViewModel est un pattern qui a pour but d'améliorer la maintenabilité de vos logiciels Silverlight. application Restfull…). 1. } public bool CanLoad(Uri targetUri. object asyncState) { throw new NotImplementedException(). La version 4 propose une nouvelle propriété appelée ContentLoader de l’objet Frame qui a pour rôle d’afficher les pages xaml. Le principe est de séparer en 3 parties : La partie Model contient nos données métiers.

} #endregion } Schéma du parcours d’une requête de navigation : Pour une démonstration d’implémentation je vous recommande le blog de David Poll. 1. Dotnet France Association .0 béta 1 v.0 [26/11/09] { throw new NotImplementedException().15 Silverlight 4.

On appelle ces applications des applications OOB qui peuvent être exécutées avec ou sans connexion internet à travers un launcher (sllaunch.1 Les applications « Sandboxed » 3.2 Gérer la taille.1.1 Introduction Les applications dîtes Sandboxed sont des applications téléchargées sur le poste client. Pour plus d’informations.exe). Les nouveautés de ces applications avec des droits très limités (autant que si l’application était hébergée dans un navigateur) sont les suivantes :      Contrôle de la position/taille/style (chrome) de la fenêtre qui affiche le site Silverlight en offline Hébergement de contenu HTML Notifications « outlook like » Offline DRM Une augmentation de la taille maximum de l’isolated storage (25Mo) 3.0 [26/11/09] 3 Amélioration de l’OOB 3.0 béta 1 v. il suffit de lire le White Paper sur Silverlight 3 chapitre « Application Offline » et se documenter sur mon blog à cette adresse. 1.16 Silverlight 4. position et aspect de vos fenêtre Silverlight 4 La taille et la position de la fenêtre hébergeant l’application Silverlight est modifiable dès la configuration du fichier manifest : Dotnet France Association .1. Il est important pour la suite de ce chapitre de connaître comment déployer une application en mode offline.

Show("Closed").Closed += delegate { MessageBox. 3. Certainement par sécurité. notify. 3. L’utilisation de ce contrôle ne fonctionne pas lorsque l’application s’exécute dans un navigateur : Si votre application est de type « sandboxed » alors vous ne pouvez pas utiliser la méthode Navigate du contrôle pour visiter un site. notify. en mode OOB seulement. string html = "<h1>test</h1>".4 Héberger du contenu HTML Vos applications Silverlight. A noter qu’il est aussi possible de gérer la position en Z de la fenêtre par rapport aux autres fenêtres du bureau ainsi que l’état de celle-ci (minimisée ou maximisée).3 Les notifications Les applications OOB Sandboxed ou trusted permettent l’utilisation de notification (toast) un peu comme Outlook le fait lors de la réception de mail.17 Silverlight 4. On peut customiser l’apparence très facilement en proposant au content un UserControl personnalisé. Dotnet France Association .1. peuvent embarquer un nouveau contrôle appelé WebBrowser.0 [26/11/09] La modification de l’apparence de la fenêtre également appelée « Window Chrome » n’est pas encore disponible dans la béta 1 de cette nouvelle version. NotificationWindow notify = new NotificationWindow() { Width = 300.1. }. Height = 50.Show(3000).0 béta 1 v. 1. Content = new TextBlock() { Text = "Hello Word" } }.

Exemple : <StackPanel x:Name="LayoutRoot" Background="White"> <TextBox x:Name="URL"/> <Button Content="GO" Click="Button_Click"/> <WebBrowser Width="500" Height="500" x:Name="Browser"/> </StackPanel> private void Button_Click(object sender. Si vous souhaitez malgré tout afficher un site web dans une application Sandboxed. UriKind.Text.18 Silverlight 4. vous pouvez afficher une page web. vous pouvez utiliser une IFRAME HTML : string html = "<IFRAME width='100%' style='overflow: hidden. RoutedEventArgs e) { Browser.NavigateToString(html).com' />".NavigateToString(html). 1.0 béta 1 v.bing.0 [26/11/09] Browser. Browser étant le contrôle WebBrowser.Navigate(new Uri(URL. Browser. Si votre application est de type « de confiance » (voir chapitre suivant).Absolute)). } Dotnet France Association .' height='100%' src='http://www.

Le contrôle WebBrowser n’est pas encore capable d’être utilisé avec des transformations type rotation/effets/opacité.2.1 Introduction Il faut faire une distinction entre une application installée sur le poste client de façon « Sandboxed » c’est-à-dire avec des droits très restreints et les applications dites « de confiance » qui sont une des nouveautés de la version 4 de Silverlight.2 Les applications de confiances 3. 1.19 Silverlight 4. 3. Une application de confiance affiche un message « warning » dès l’installation pour prévenir l’utilisateur : On passe d’une application « Sandboxée » à une application de confiance en modifiant le fichier manifest avec l’assistant de Visual Studio : Dotnet France Association .0 béta 1 v. Si vous souhaitez utiliser un brush HTML en fond d’un contrôle (sur la propriété Fill d’un rectangle par exemple). vous avez à votre disposition la classe HtmlBrush.0 [26/11/09] A noter que le flash s’exécute .

0 béta 1 v. 1.20 Silverlight 4.0 [26/11/09] Ces applications de confiance sont aussi exécutées par SLLaunch.exe mais ont la possibilité de :        Lire/Ecrire sur le système de fichier Ouvrir un autre programme (par exemple Office©) Utiliser l’interopérabilité COM Intégration totale du clavier en mode plein écran Détection du matériel Plus besoin de clientaccesspolicy.xml côté serveur lors de communication avec WCF Intégration des applications installées dans le panneau de configuration (Add/Remove Programs) : Dotnet France Association .

2. Une liste des dossiers accessibles est disponible ici. 1. RoutedEventArgs e) { foreach (var item in Directory.Combine( Dotnet France Association .Create( System.0 béta 1 v.0 [26/11/09] 3.21 Silverlight 4. <StackPanel x:Name="LayoutRoot" Background="White"> <Button Content="Enumérer le bureau" x:Name="BtnEnumerate" Click="BtnEnumerate_Click"/> <Button Content="Ecrire un fichier" x:Name="BtnWrite" Click="BtnWrite_Click"/> <Button Content="Lire un fichier" x:Name="BtnRead" Click="BtnRead_Click"/> </StackPanel> private void BtnEnumerate_Click(object sender.Path.SpecialFolder.Show(item). voici un petit exemple qui énumère.GetFolderPath( Environment.EnumerateFiles( Environment. nous pouvons lire et écrire dans des dossiers prédéfinis tels que le bureau ou le dossier MyDocuments. RoutedEventArgs e) { File.MyDocuments))) MessageBox. Pour illustrer ceci.2 Accès au système de fichiers Lors de l’utilisation d’une application de confiance. } private void BtnWrite_Click(object sender.IO. crée et lit des fichiers.

3 Interopérabilité COM L’interopérabilité COM permet à nos applications de confiance d’accéder à la suite Office ou encore l’API Windows. //Récupération de l'élement actif dynamic active = excelFile. "Hello.0 béta 1 v.MyDocuments).workbooks.2. lors de la PDC. //Modification de la première cellule active.CSharp. MessageBox. //On affiche le document excel excelFile. "Hello.ActiveSheet. Pour l’utilisation de composant COM. } private void BtnRead_Click(object sender. une application est capable :     De créer un élément dans Outlook Calendar De créer un fichier Excel D’utiliser l’API Windows … Pour utiliser la démonstration suivante.Value = "plop". 1.txt")).Cells[1.OpenText(path). Si on reprend le même exemple que Scott G.Combine( Environment. //On cache Excel le temps de la création excelFile.Visible = true.Show(reader.Visible = false. StreamReader reader = File. La création d’un document Excel : private void btnExcel_Click(object sender.MyDocuments). //Création d'un workbook excelFile.0 [26/11/09] Environment. nous allons nous appuyer sur une nouveauté du C #4 : La DLR et le type dynamic.IO.Close().22 Silverlight 4. RoutedEventArgs e) { dynamic excelFile = ComAutomationFactory.CreateObject("Excel.ReadToEnd()). } Dotnet France Association . 1]. pensez à ajouter la référence à Microsoft.SpecialFolder.Path.Add().SpecialFolder.GetFolderPath( Environment. RoutedEventArgs e) { string path = System.GetFolderPath( Environment. } 3.Application").txt"). reader.

ou non.AudioCaptureDevice = (AudioCaptureDevice) CaptureDeviceConfiguration.0 [26/11/09] 4 Le multimédia 4.1 Support de la webcam et du micro Nous l’attendions et il est dommage de ne l’avoir qu’à partir de la version 4 : le support de la webcam et du micro.RequestDeviceAccess()) capture. Une fois l’instance capture initialisée.AllowedDeviceAccess || CaptureDeviceConfiguration.Show(). nous déclarons un type CaptureSource que nous initialisons avec les périphériques de capture audio/vidéo : CaptureSource capture = new CaptureSource(). Son utilisation est très simple. win.GetAvailableAudioCaptureDevices()[0]. Invite de commande Pour prendre une photo «instantanée » nous utilisons la méthode AsyncCaptureImage. Une invite de commande proposera à l’utilisateur d’accepter. Cette méthode est couplée dans mon exemple avec une ChildWindow pour montrer le résultat : capture. win. que l’application Silverlight utilise ses périphériques. capture.AsyncCaptureImage((image) => { AffichageImage win = new AffichageImage(). Dotnet France Association .SetSource(capture). capture. webcamBorder.23 Silverlight 4. 1.GetAvailableVideoCaptureDevices()[0].VideoCaptureDevice = (VideoCaptureDevice) CaptureDeviceConfiguration.ImgSource = image. if (CaptureDeviceConfiguration. Le démarrage de la webcam se déclenche grâce à l’appel Start de l’instance capture.Start(). nous pouvons convertir le flux vidéo en brush que nous appliquons en fond d’un border par exemple : VideoBrush brush = new VideoBrush().0 béta 1 v.Background = brush. brush.

24 Silverlight 4. j’ai combiné les pixels shaders (généré avec l’outil Shazzam) avec l’utilisation de la webcam. 1. Cette technologie est apparue avec Silverlight 3 mais comme je n’en avais pas encore parlé je me rattrape ici. C’est-à-dire que le client recevra une vidéo de moins bonne qualité pour éviter qu’elle ne s’arrête.2 Mise en place du SmoothStreaming Le smoothstreaming est la capacité d’afficher un flux vidéo (HD ou non) en streaming à travers le protocole HTTP par rapport au taux d’occupation du processeur et de la bande passante. Voici le résultat : Application de test (Avec ou Sans Pixel Shader le résultat est pas terrible) 4.0 béta 1 v. Pour l’application de test que j’ai réalisé pour ce livre blanc (disponible ici). Exemple de Microsoft© : Dotnet France Association .0 [26/11/09] }).

0 béta 1 v. il vous faut installez IIS Media Services 3. Après l’installation d’IIS Media Services. il faut configurer le format de sortie à IIS Smooth Streaming : Puis dans Output. Deux manières de l’encoder : l’utilisation d’Expression Encoder 3 ou de son SDK pour le faire en code.0 (en plus de IIS7) téléchargeable ici.25 Silverlight 4. choisir le déploiement WebDav sur le serveur IIS : Puis finir par encoder : Dotnet France Association . rendez-vous dans la console d’administration d’IIS pour voir apparaître de nouveaux icones : De retour dans Expression Encoder. Pour le déploiement. Il faudra encoder la vidéo en la compressant de plusieurs manières pour avoir tous types de qualités. 1.0 [26/11/09] La première étape de mise en place du smoothstreaming est l’encodage de la vidéo.

net.4 WMS Multicast Jusqu’à présent.0 béta 1 v. 4. Plus d’information sur ce PowerPoint© de 110 slides créé par Microsoft©. Plus d’informations en vidéo sur le site Silverlight. c’est-à-dire qu’on passe à du Single-to-many. 1. Le but de SMF est d’aider à la création d’un player Silverlight de haut niveau en fournissant plusieurs helpers. Silverlight 4 fonctionne avec le multicast.26 Silverlight 4.0 [26/11/09] Si vous souhaitez réaliser cette manipulation. 4. seul l’unicast fonctionnait en termes de streaming (c’est d’ailleurs toujours la seule solution si votre réseau n’est pas compatible multicast).3 Silverlight Media Framework SMF (Silverlight Media Framework) est un projet opensource (codeplex) qui fait son apparition avec la version 3 de Silverlight. direction le blog de Pierrick Martos qui a créé un post sur le sujet en référençant les DLL du SDK Encoder. Dotnet France Association .

XAP à partir d’un magasin de widgets. j’utiliserai un cas concret pour lequel j’ai été confronté. MVC…). Chaque module est indépendant et peux être architecturé de la façon que vous souhaitez (n-tiers.0 béta 1 v. Ces widgets peuvent être téléchargés et installés dans l’application. Je développe actuellement un viewer offline en Silverlight 4 pour Dotnet-France dont l’un des principes est de proposer des widgets. Je vous passe pour le moment les détails sur le téléchargement des . design très moche Pour cela il faut mettre en place une architecture permettant d’ajouter à la volé ces widgets (représentés par des . 1.27 Silverlight 4.0 [26/11/09] 5 MEF (Managed Extensibility Framework) Le but de MEF est de créer une application dite “composite” (un peu comme Prism v2). On va pouvoir ajouter des fonctionnalités à notre logiciel avec le simple ajout de dll dans un dossier spécifique. allons directement au vif du sujet en imaginant que le client référence la dll contenant le widget.0 et désormais avec Silverlight 3 et 4.XAP). MVVM. MEF est supporté dans le framework 4. Nous créons quatre projets :    Le site hôte L’application Shell qui héberge tous les widgets (PrincipalShell) L’application MyWidget représentant un widget Dotnet France Association . Pour illustrer ce chapitre. Version non fonctionnel. le choix se porte donc sur MEF.

ComponentModel.0 [26/11/09]  La librairie MEFContract qui représente les entités échangées grâce à MEF Nous ajoutons trois références permettant d’utiliser MEF aux deux applications Silverlight: C:\Program Files\Microsoft SDKs\Silverlight\v4.0\Libraries\Client\System. System. 1.dll et MEFContract.dll.Composition.Initialization. Le code IContract : public interface IContract { string Nom { get. IContract { public MainPage() { InitializeComponent().28 Silverlight 4.0 béta 1 v. } set { Dotnet France Association .Composition. } #region IContract Members public string Nom { get { return "Bing widget".ComponentModel. } } Le code behind du widget : [Export(typeof(IContract))] public partial class MainPage : UserControl. L’application PrincipalShell dans ce cas de figure doit aussi referencer MyWidget. set.

set.Children.0 [26/11/09] } } #endregion } Et le code du shell principal : public partial class MainPage : UserControl { public MainPage() { InitializeComponent(). le widget est bien chargé à l’exécution. Après l’avoir téléchargé il faut référencer cette DLL au projet PrincipalShell : Dotnet France Association . les DLL ne doivent pas être référencées de base. PartInitializer. 1.xap séparés et de les charger à l’exécution. } } Résultat.29 Silverlight 4. Cependant.Add((UserControl)widget). } [ImportMany] public IEnumerable<IContract> widgets { get. Ceci sera le cas pour tous les widgets qui seront référencés par le shell principal. La solution est d’isoler chaque widget dans un fichier .0 béta 1 v. Pour cela il nous faut utiliser une classe appelée PackageCatalog qui est disponible dans le Silverlight Toolkit. foreach (var widget in widgets) LayoutRoot.SatisfyImports(this). si on reprend la problématique de début.

var container = new CompositionContainer(catalog). } } Les sources sont téléchargeables ici.3 de ce document Dotnet France Association .1 SDK Facebook Cours disponible dans la version 1.Cancelled && e. UriKind. public MainPage() { InitializeComponent(). } [ImportMany(AllowRecomposition = true)] public IEnumerable<UserControl> widgets { get. foreach (var widget in widgets) LayoutRoot.ComposeParts(this).0 béta 1 v.DownloadPackageAsync(new Uri("http://localhost:8094/ClientBin/MyWidget. catalog.Error == null) catalog.Children.AddPackage(p). il faut juste modifier le paramètre de l’attribut Export : [Export(typeof(UserControl))] Puis au niveau du PrincipalShell.Add((UserControl)widget).3 de ce document 7 Annexe 7. DownloadCompleted).Sleep(1000). Au niveau du widget.Current). } private void DownloadCompleted(AsyncCompletedEventArgs e.xap : public partial class MainPage : UserControl { PackageCatalog catalog = new PackageCatalog(). 6 WCF RIA Services Cours disponible dans la version 1. dll Et ne pas oublier de casser la référence à MyWidget.0\Toolkit\Nov09\Bin\System.ComponentModel.xap". il faut utiliser la classe PackageCatalog et la fonction DownloadPackageAsync pour télécharger le . container. 1.30 Silverlight 4. set.0 [26/11/09] C:\Program Files\Microsoft SDKs\Silverlight\v4.AddPackage(Package. Package.Packaging. if (!e.Composition.Toolkit. A noter que cette solution fonctionne en mode « Out Of Browser ». Package p) { Thread.Absolute).

3 de ce document Dotnet France Association .3 de ce document 7.31 Silverlight 4.0 béta 1 v. 1.3 Silverlight Toolkit Cours disponible dans la version 1.0 [26/11/09] 7.2 BigMap Cours disponible dans la version 1.

Sign up to vote on this title
UsefulNot useful