Les nouveautés de Silverlight 4

par Benjamin Roux (Retour aux articles)
Date de publication : 07/12/2009 Dernière mise à jour :

Cet article vous présentera les nouveautés de Silverlight 4.

Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles)

1 2 3 4 5 6

Introduction.............................................................................................................................................................3 Pré-requis............................................................................................................................................................... 4 L'impression........................................................................................................................................................... 5 Clic droit................................................................................................................................................................. 6 La molette de la souris.......................................................................................................................................... 8 Webcam et microphone......................................................................................................................................... 9 6-1 - Prendre une photo à partir du flux vidéo.................................................................................................... 12 7 - RichtextArea......................................................................................................................................................... 14 8 - Support du presse-papier.................................................................................................................................... 16 9 - Hébergement de HTML....................................................................................................................................... 17 9-1 - WebBrowser................................................................................................................................................ 18 9-2 - HtmlBrush.................................................................................................................................................... 20 10 - Trusted Application.............................................................................................................................................23 10-1 - Accès au système de fichier local............................................................................................................ 23 10-2 - Interopérabilité COM................................................................................................................................. 23 10-3 - Support total du clavier en plein-écran..................................................................................................... 24 11 - API de notification.............................................................................................................................................. 25 12 - TextTrimming...................................................................................................................................................... 26 13 - Drag&Drop à partir du bureau........................................................................................................................... 27 14 - Authentification Réseau..................................................................................................................................... 28 15 - Amélioration du Data Binding............................................................................................................................ 29 15-1 - Binding sur DependencyObject.................................................................................................................29 15-2 - StringFormat, TargetNullValue, FallbackValue.......................................................................................... 29 15-2-1 - StringFormat......................................................................................................................................29 15-2-2 - TargetNullValue................................................................................................................................. 30 15-2-3 - FallbackValue.................................................................................................................................... 30 16 - Thèmes implicites.............................................................................................................................................. 31 17 - Managed Extensibility Framework (MEF).......................................................................................................... 32 18 - ICommand et Command....................................................................................................................................33 19 - Divers................................................................................................................................................................. 34 20 - Conclusion..........................................................................................................................................................35 Remerciements.......................................................................................................................................................... 36

-

-2Copyright 2009 - Benjamin Roux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.
http://broux.developpez.com/articles/csharp/silverlight-4

Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles)

1 - Introduction
La beta de Silverlight 4 vient tout juste d'être annoncée à la PDC à Los Angeles durant le mois de novembre, c'est le moment pour nous de vous présenter les différentes nouveautés. Parmi celles-ci, on retrouve beaucoup de choses réclamées par la communauté depuis longtemps, une preuve que les équipes de Silverlight nous écoutent !

-3Copyright 2009 - Benjamin Roux. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC.
http://broux.developpez.com/articles/csharp/silverlight-4

etc sans l'autorisation expresse de l'auteur. documents. Droits de diffusion permanents accordés à developpez LLC. même partielle. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 2 . http://broux. ne peut être faite de ce site et de l'ensemble de son contenu : textes.developpez.Pré-requis Afin de développer avec Silverlight 4.com/articles/csharp/silverlight-4 . Aucune reproduction.NET 4 Preview Silverlight Toolkit Silverlight Media Framework -4Copyright 2009 . images. il vous faut • • Visual Studio 2010 Beta 2 Silverlight Tools for Visual Studio 2010 On peut également s'amuser avec d'autres outils • • • Expression Blend for .Benjamin Roux.

Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Vraiment pratique. un canvas et ses enfants).com/articles/csharp/silverlight-4 .Benjamin Roux. http://broux. Trois petites lignes de code suffisent pour l'implémenter PrintDocument document = new PrintDocument(). documents. Droits de diffusion permanents accordés à developpez LLC. images. // on définit la partie à afficher via la propriété PageVisual document. Comme vous pouvez le voir.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 3 .L'impression Première des nouveautés. e2) => e2. on peut choisir ce que l'on veut imprimer : toute notre application ou seulement une partie (une image. est le support de l'impression.Print(). -5Copyright 2009 . etc sans l'autorisation expresse de l'auteur. même partielle.developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes. et il me semble la plus demandée. document.PrintPage += (o.PageVisual = this. Il est également possible de définir des actions à effectuer avant et après l'impression via deux évènements : StartPrint et EndPrint. Aucune reproduction.

double x.Handled = true. double y) { Canvas elementOutside = new Canvas().IsOpen = false. } private void Image_MouseRightButtonDown(object sender. Popup. Les équipes de Silverlight ont répondu à nos appels via un nouvel évènement permettant de capter le clic droit.Add(elementOutside). la surcharge du menu contextuel.GetPosition(null)). x).Y). childCanvas. Droits de diffusion permanents accordés à developpez LLC.Clear().Content. public partial class MainPage : UserControl { public MainPage() { InitializeComponent().jpg" VerticalAlignment="Center" HorizontalAlignment="Center" Width="100" MouseRightButtonDown="Image_MouseRigh </Grid> Pour afficher un menu il suffit donc d'afficher par exemple une ListBox à l'endroit où on a cliqué. Aucune reproduction. http://broux.Content.SetLeft(content. documents. menu.IsOpen = false). ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle.Child = childCanvas.Background = new SolidColorBrush(Colors. menu.Children. point.Child is Canvas) ((Canvas)Popup.ActualWidth. elementOutside.developpez. Point point) { PerformPlacement(content. if (Popup != null) { Popup. if (Popup.ActualHeight. childCanvas.Children.Children.Benjamin Roux. elementOutside.X. e.Current.Clic droit Une autre demande qui revenait souvent. } private void PerformPlacement(FrameworkElement content. images.Items. set.com/articles/csharp/silverlight-4 .Child). point. } e.Width = Application. MouseButtonEventArgs e) { /* A modifier */ ListBox menu = new ListBox(). #region Popup internal Popup Popup { get.MouseLeftButtonDown += new MouseButtonEventHandler((o.Add("Print").Current.Add(content).Transparent). } private void PerformPlacement(FrameworkElement content.Add("Save as"). Canvas childCanvas = new Canvas(). Canvas. e) => Popup. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. -6Copyright 2009 . Prenons ce Xaml simple <Grid x:Name="LayoutRoot" Background="White"> <Image Source="Images/ moi.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 4 . PerformPlacement(menu.Items. etc sans l'autorisation expresse de l'auteur. elementOutside.Height = Application. } Popup = new Popup().Host. elementOutside.Host.

Le résultat : On peut bien entendu ajouter des évènements pour les clics sur le menu mais ce n'est pas le sujet.SetTop(content.developpez. #endregion Le code pour placer la ListBox au bon endroit (tout ce qui se trouve dans la #region) vient de mon ancien code pour afficher un Menu Contextuel que vous pouvez trouver sur mon blog. Droits de diffusion permanents accordés à developpez LLC.Benjamin Roux.IsOpen = true. ne peut être faite de ce site et de l'ensemble de son contenu : textes. y).Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Canvas. documents. -7Copyright 2009 . etc sans l'autorisation expresse de l'auteur. } } Popup. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Aucune reproduction. même partielle.com/articles/csharp/silverlight-4 . images. http://broux.

transform.ScaleY += scale. if (transform. même partielle. images. Droits de diffusion permanents accordés à developpez LLC.Delta correspond au « montant » de la molette.RenderTransform> <ScaleTransform ScaleX="1" ScaleY="1" /> </Image. etc sans l'autorisation expresse de l'auteur.ScaleX > 0.jpg" Width="100" Height="100" MouseWheel="Image_MouseWheel"> <Image.1.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 5 .developpez. else scale = -0. } } e. MouseWheelEventArgs e) { ScaleTransform transform = ((ScaleTransform)img. Exemple simple pour agrandir une image avec la molette <Grid x:Name="LayoutRoot" Background="White"> <Image x:Name="img" Source="Images/moi.1. -8Copyright 2009 . double scale = 0. http://broux.5 || scale > 0) { transform. if (e.Benjamin Roux.ScaleX += scale. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.La molette de la souris Une nouvelle nouveauté est le support de la molette de la souris pour tous les contrôles.RenderTransform). ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction.RenderTransform> </Image> </Grid> private void Image_MouseWheel(object sender. documents.com/articles/csharp/silverlight-4 .Delta > 0) scale = 0.

il est possible de récupérer l'accès au périphérique vidéo par défaut grâce à la méthode statique « GetDefaultVideoCaptureDevice ». Pour éviter de devoir redemander l'accès aux périphériques. if (CaptureDeviceConfiguration. on va devoir créer une instance de la classe « CaptureSource » en initialisant ses propriétés « VideoCaptureDevice » et « AudioCaptureDevice » pour spécifier les périphériques vidéo et audio à utiliser. même partielle. Aucune reproduction.Benjamin Roux.RequestDeviceAccess()) { } Une fois que l'utilisateur a confirmé l'accès à ses périphériques. images. ne peut être faite de ce site et de l'ensemble de son contenu : textes. if (videoDevice != null && audioDevice != null) { } Pour initialiser la capture vidéo.Media » pour intéragir avec les périphériques audio et vidéo. L'API Silverlight permet à présent de détecter et d'utiliser les périphériques audio et vidéo connectés à l'ordinateur.com/articles/csharp/silverlight-4 .GetDefaultAudioCaptureDevice(). VideoCaptureDevice videoDevice =CaptureDeviceConfiguration.Webcam et microphone Cette partie a été écrite par Jérôme Lambert. on va pouvoir retrouver les périphériques disponibles. Pour cela. La première classe dont vous aurez besoin est « CaptureDeviceConfiguration » qui permet de demander à l'utilisateur l'autorisation d'utiliser les périphériques de Webcam et microphone grâce à la méthode statique « RequestDeviceAccess ». documents. AudioCaptureDevice audioDevice = CaptureDeviceConfiguration.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 6 .Windows. Droits de diffusion permanents accordés à developpez LLC. http://broux. le support de la Webcam et du microphone.developpez. De nouvelles classes sont à présent disponibles au sein de l'espace de noms « System. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. -9Copyright 2009 .GetDefaultVideoCaptureDevice(). il est possible d'utiliser la propriété « AllowedDeviceAccess » qui renvoie vrai dans le cas où l'utilisateur a déjà donné son accord pour l'accès à ses périphériques au cours de la session. Il est aussi possible de récupérer le périphérique audio par défaut via la méthode statique « GetDefaultAudioCaptureDevice ». Voici une nouveauté attendue depuis longtemps.AllowedDeviceAccess || CaptureDeviceConfiguration. L'appel à cette méthode lancera une boite de dialogue de confirmation auprès de l'utilisateur. etc sans l'autorisation expresse de l'auteur.

Show(videoDevice.Started) { _captureSource.State == CaptureState. Pour cela. on utilisera les méthodes statiques « GetAvailableVideoCaptureDevices » et « GetAvailableAudioCaptureDevices » de la classe « CaptureDeviceConfiguration ». L'utilisateur a aussi la possibilité de consulter la liste de ses périphériques vidéo et audio disponibles et ainsi changer ceux par défaut.SetSource(captureSource). même partielle. Vous pourrez aussi vous aider de la propriété « State » pour déterminer si la capture est bien démarrée. captureSource. captureSource. nous avons décidé d'utiliser les périphériques vidéo et audio par défaut. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. rectangle1.Benjamin Roux. il ne reste plus qu'à démarrer le périphérique grâce à la méthode « Start » de notre classe « CaptureSource ». foreach (var audioDevice in audioDevices) MessageBox. VideoBrush videoBrush = new VideoBrush(). Dans notre exemple.10 Copyright 2009 . vous allez pouvoir afficher votre capture vidéo directement dans un élément de votre application Silverlight grâce à la classe « VideoBrush ».GetAvailableVideoCaptureDevices(). videoBrush. mais il est aussi possible de récupérer l'ensemble des périphériques vidéo et audio disponibles sur la machine de l'utilisateur. var videoDevices = CaptureDeviceConfiguration.Stop(). Pour l'arrêt de la capture. var audioDevices = CaptureDeviceConfiguration. Enfin.Fill. videoBrush.Stretch = Stretch.Show(audioDevice.FriendlyName). } Pour finir. Droits de diffusion permanents accordés à developpez LLC.FriendlyName). http://broux.developpez.VideoCaptureDevice = videoDevice. Aucune reproduction. .AudioCaptureDevice = audioDevice. il suffit de se rendre dans les paramètres de l'application Silverlight en faisant un clique droit sur l'application Silverlight et en se rendant dans l'onglet « Webcam / Mic ». documents.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) var captureSource = new CaptureSource().com/articles/csharp/silverlight-4 . c'est aussi simple que le démarrage grâce à la méthode « Stop ». foreach (var videoDevice in videoDevices) MessageBox.GetAvailableAudioCaptureDevices(). Pour ce faire. etc sans l'autorisation expresse de l'auteur.Fill = videoBrush. ne peut être faite de ce site et de l'ensemble de son contenu : textes. if (_captureSource != null && _captureSource. images.

Windows.com/articles/csharp/silverlight-4 .Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Le code complet : using using using using using using using using using using using System. System. System.11 Copyright 2009 .Linq.developpez.Shapes.Windows.Windows. public MainPage() { InitializeComponent(). etc sans l'autorisation expresse de l'auteur. System. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. documents. System.Net. namespace SilverlightApplication1 { public partial class MainPage : UserControl { CaptureSource _captureSource = null. System.Windows. Droits de diffusion permanents accordés à developpez LLC.Windows. http://broux.Media.Generic. Aucune reproduction. } private void buttonStart_Click(object sender.Controls. System.Animation.Media. System.Documents.Windows. RoutedEventArgs e) { if (_captureSource != null . System. System. System. images. même partielle. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Windows.Benjamin Roux.Input.Collections.

var audioDevices = CaptureDeviceConfiguration. foreach (var videoDevice in videoDevices) MessageBox.Benjamin Roux. } if (CaptureDeviceConfiguration. VideoBrush videoBrush = new VideoBrush().Prendre une photo à partir du flux vidéo Il est également possible de prendre une photo à partir du flux vidéo. .Started) { _captureSource. }.com/jlambert/ 6-1 .VideoCaptureDevice = videoDevice. http://broux. RoutedEventArgs e) { var videoDevices = CaptureDeviceConfiguration. } else { } MessageBox. images. e) => { var bmp = e. Droits de diffusion permanents accordés à developpez LLC.developpez. même partielle. AudioCaptureDevice audioDevice = CaptureDeviceConfiguration.FriendlyName).Result.SetSource(_captureSource).com/articles/csharp/silverlight-4 . Source. _captureSource.Show(videoDevice.FriendlyName).State == CaptureState. ne peut être faite de ce site et de l'ensemble de son contenu : textes.State == CaptureState. Aucune reproduction.Stop().Start(). } } private void buttonStop_Click(object sender. etc sans l'autorisation expresse de l'auteur. videoBrush. videoBrush. _captureSource.Show(audioDevice.GetAvailableAudioCaptureDevices(). . documents.Stretch = Stretch.Started) { _captureSource.").12 Copyright 2009 . _captureSource.GetDefaultAudioCaptureDevice(). } } private void buttonDevices_Click(object sender.Show("Accès refusé par l'utilisateur ou aucun périphérique vidéo ou audio n'est disponible..AudioCaptureDevice = audioDevice..Fill = videoBrush. foreach (var audioDevice in audioDevices) MessageBox. if (videoDevice != null && audioDevice != null) { _captureSource = new CaptureSource().developpez. RoutedEventArgs e) { if (_captureSource != null && _captureSource.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) && _captureSource.Fill.GetAvailableVideoCaptureDevices(). rectangle1.AllowedDeviceAccess || CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice(). } } } Vous pouvez également tester une démo de l'application ici : silverlight-4-webcam-and-mic/ http://dotnetdemos. Pour cela la classe CaptureSource met à notre disposition une méthode AsyncCaptureImage. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Stop().RequestDeviceAccess()) { VideoCaptureDevice videoDevice = CaptureDeviceConfiguration.CaptureImageCompleted += (o.

même partielle.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Source. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Droits de diffusion permanents accordés à developpez LLC. documents.developpez.13 Copyright 2009 . http://broux.com/articles/csharp/silverlight-4 . etc sans l'autorisation expresse de l'auteur.Benjamin Roux.CaptureImageAsync(). Aucune reproduction. images. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. .

Content> <TextBlock Text="U" FontStyle="Italic" /> </Button.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 7 . } richText.Row="0" Orientation="Horizontal"> <Button x:Name="bold" Content="B" FontWeight="Bold" Click="bold_Click" /> <Button x:Name="underline" Click="underline_Click"> <Button. Aucune reproduction. italique et ajouter une image) et de notre éditeur. Maintenant il nous reste à écrire un peu de code private void bold_Click(object sender.Insert(container).SetPropertyValue(TextElement. documents. Droits de diffusion permanents accordés à developpez LLC.Italic).14 Copyright 2009 . } private void addImage_Click(object sender. même partielle. RoutedEventArgs e) { richText.com/articles/csharp/silverlight-4 . } private void italic_Click(object sender.Selection.Selection.developpez. images.TextDecorationsProperty.RowDefinitions> <StackPanel Grid.Benjamin Roux.jpg". ne peut être faite de ce site et de l'ensemble de son contenu : textes. La chose merveilleuse est que nous pouvons également insérer n'importe quel type de contrôle via l'objet InlineUiContainer. FontStyles. container. UriKind. FontWeights.Relative)) }.Content> </Button> <Button x:Name="addImage" Content="Add image" Click="addImage_Click" /> </StackPanel> <RichTextArea x:Name="richText" Grid.Bold). Comme vous pouvez le voir le RichText possède une propriété Selection représentant le texte sélectionné et auquel nous allons appliquer nos « styles ».FontWeightProperty. etc sans l'autorisation expresse de l'auteur.RichtextArea Un nouveau contrôle fait également son apparition. RoutedEventArgs e) { richText.Selection.FontStyleProperty. un bouton ou même un TreeView ! Un RichTextBox est un enchainement de Paragraph.Underline). il s'agit d'un éditeur de texte riche. Ici j'ai mis une image mais on pourrait mettre un DataGrid. TextDecorations.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="*" /> </Grid. RoutedEventArgs e) { InlineUIContainer container = new InlineUIContainer(). souligné. http://broux. } private void underline_Click(object sender.Selection.Content> </Button> <Button x:Name="italic" Click="italic_Click" > <Button.Content> <TextBlock Text="U" TextDecorations="Underline" /> </Button.Child = new Image { Source = new BitmapImage(new Uri("Images/moi. Exemple basique : <Grid x:Name="LayoutRoot" Background="White"> <Grid. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. RoutedEventArgs e) { richText.Row="1" /> </Grid> On définit notre interface composée de 4 boutons (gras.SetPropertyValue(TextElement.SetPropertyValue(TextElement. Chaque Paragraph peut contenir d'autres éléments tels que : .

developpez. DataGrid. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Benjamin Roux. Aucune reproduction. un LineBreak. images. un Run ou un Span) InlineUiContainer (Bouton. http://broux.) Run (possède une propriété Text) Span (qui est une collection de Inline) Bold (pour mettre un texte en gras) <Bold>Texte</Bold> Hyperlink (un lien hypertexte) Italic (pour mettre un texte en italique) Underline (pour souligner un texte) Le code précédent peut donner le résultat suivant Ce contrôle peut devenir tout à fait puissant ! A mon avis il ne faudra pas attendre beaucoup avant que des personnes ne distribuent un joli éditeur de texte en Open-Source. même partielle.com/articles/csharp/silverlight-4 .Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) • • • • • • • • Inline (peut être un InlineUiContainer. .15 Copyright 2009 . Droits de diffusion permanents accordés à developpez LLC. etc sans l'autorisation expresse de l'auteur. documents.

Add(new Run { Text = Clipboard.Text).Blocks. paragraph. documents. RoutedEventArgs e) { Paragraph paragraph = new Paragraph(). Une méthode permet également de savoir si du texte est présent dans le presse-papier.) et provoque l'affichage de ce message Ce message n'apparait qu'une seule fois par session. } richText. Aucune reproduction.16 Copyright 2009 .developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes. une copie dans le presse-papier ne peut se faire que par une action de l'utilisateur (clic sur un bouton. On peut donc copier/coller un texte de/vers Word par exemple (simplement le texte pas les styles).Support du presse-papier Dans les versions précédentes de Silverlight il fallait passer par un appel en Javascript qui fonctionnait le plus souvent uniquement sous Internet Explorer.com/articles/csharp/silverlight-4 . Comme pour plusieurs fonctionnalités dans Silverlight. Exemple simple en rajoutant 2 boutons Copy et Paste à notre code précédent (RichTextArea).Benjamin Roux. Le Clipboard Silverlight est commun à toutes les applications Silverlight mais également à la machine de l'utilisateur. private void copy_Click(object sender. } private void paste_Click(object sender.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 8 . . images. etc sans l'autorisation expresse de l'auteur. même partielle.Add(paragraph). RoutedEventArgs e) { Clipboard. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette fonctionnalité fait donc son apparition pour le bonheur des développeurs. Droits de diffusion permanents accordés à developpez LLC.SetText(richText.Selection.Inlines. appui sur une touche du clavier.GetText() }). http://broux.

même partielle. A noter que l'hébergement de HTML ne fonctionne que dans une application Out Of Browser.Hébergement de HTML Silverlight 4 permet également d'afficher du HTML au sein d'une application. documents. Aucune reproduction. etc sans l'autorisation expresse de l'auteur. ne peut être faite de ce site et de l'ensemble de son contenu : textes.17 Copyright 2009 . c'était faisable en affichant une div HTML par-dessus l'application Silverlight là où on voulait qu'elle s'affiche.Benjamin Roux. images.developpez. Dans les précédentes versions.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 9 .com/articles/csharp/silverlight-4 . Dans le cas contraire vous obtiendrez ce résultat . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://broux. Droits de diffusion permanents accordés à developpez LLC.

images. UriKind. ce qui inclut le même domaine.Navigate(new Uri("http://localhost/index. le WebBrowser. Deux méthodes utiles : Navigate(url) et NavigateToString(html) <WebBrowser x:Name="browser" Width="400" Height="300" /> On peut donc écrire en code behind.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 9-1 . Droits de diffusion permanents accordés à developpez LLC. même partielle.Benjamin Roux.18 Copyright 2009 . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. browser.html". Aucune reproduction. Pour des raisons de sécurité le contrôle WebBrowser ne peut afficher que du contenu se trouvant dans le même domaine que l'application Silverlight. Pour afficher du contenu d'un autre domaine on peut passer par une iframe hostée dans notre page se trouvant sur notre domaine.Absolute)).com/articles/csharp/silverlight-4 . . Ou bien browser. http://broux. le même protocole et le même port. etc sans l'autorisation expresse de l'auteur.developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes.WebBrowser Un contrôle fait donc son apparition. documents.NavigateToString("<b>Html hosté dans une application SL</b><br/><p>C'est top<p>").

youtube. ne peut être faite de ce site et de l'ensemble de son contenu : textes.com/watch?v=FzRH3iTQPrk\" width=\"600px \" height=\"600px\" />"). etc sans l'autorisation expresse de l'auteur. même partielle.com/articles/csharp/silverlight-4 . Droits de diffusion permanents accordés à developpez LLC. documents. . http://broux.19 Copyright 2009 . Aucune reproduction.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Le WebBrowser est capable d'afficher n'importe quel type de contenu même des applications Flash (si le plugin est installé sur la machine bien entendu). images. browser.Benjamin Roux. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.NavigateToString("<iframe src=\"http://www.developpez.

Benjamin Roux.developpez. ne peut être faite de ce site et de l'ensemble de son contenu : textes. même partielle. http://broux. . Aucune reproduction. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.HtmlBrush Il est également possible d'appliquer un brush de type Html via le HtmlBrush.20 Copyright 2009 . etc sans l'autorisation expresse de l'auteur. documents.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 9-2 . Droits de diffusion permanents accordés à developpez LLC. images.com/articles/csharp/silverlight-4 .

com/articles/csharp/silverlight-4 .Redraw(). void MainPage_Loaded(object sender. images. .Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Exemple : <StackPanel x:Name="LayoutRoot" Background="White"> <WebBrowser x:Name="browser" Source="youtube. documents.Fill != null) ((HtmlBrush)rect. etc sans l'autorisation expresse de l'auteur.Start(). Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. RoutedEventArgs e) { DispatcherTimer timer = new DispatcherTimer().Benjamin Roux.Fill).html" Width="300" Height="300" Visibility="Collapsed" /> <Rectangle x:Name="rect" Width="300" Height="300"> <Rectangle.21 Copyright 2009 . timer. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction. EventArgs e) { if (rect.Fill> </Rectangle> </StackPanel> L'astuce est qu'il faut rafraichir notre HtmlBrush via la méthode Redraw.Interval = TimeSpan. } void timer_Tick(object sender.developpez. http://broux.Fill> <HtmlBrush SourceName="browser" /> </Rectangle. Droits de diffusion permanents accordés à developpez LLC. timer. timer.FromMilliseconds(100). } On peut alors obtenir un rectangle dont le remplissage provient d'un WebBrowser. même partielle.Tick += new EventHandler(timer_Tick).

developpez. images.22 Copyright 2009 . http://broux. documents. même partielle. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Droits de diffusion permanents accordés à developpez LLC. etc sans l'autorisation expresse de l'auteur.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Exemple avec un bouton : . Aucune reproduction.Benjamin Roux. ne peut être faite de ce site et de l'ensemble de son contenu : textes.com/articles/csharp/silverlight-4 .

Benjamin Roux.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 10 .ItemsSource = Directory.HasElevatedPermissions 10-1 . Une propriété permet de savoir si l'application tourne en mode privilégiée.SpecialFolder. http://broux.developpez.MyMusic)).HasElevatedPermissions) { files. Aucune reproduction. A l'installation la fenêtre change quelque peu Dans ce mode plusieurs privilèges sont accordés. Droits de diffusion permanents accordés à developpez LLC.EnumerateDirectories(Environment. App.Trusted Application Un nouveau mode d'application Out Of Browser fait également son apparition.Interopérabilité COM Une application Trusted peut également interagir avec des composants COM comme par exemple Word ou Excel ! Il suffit pour cela de passer par l'API AutomationFactory.com/articles/csharp/silverlight-4 .Accès au système de fichier local Une application Out Of Browser en mode Trusted permet l'accès au système de fichiers local.Current. il s'agit d'un mode dit « Trusted » (« de confiance » en français).GetFolderPath(Environment. Exemple avec de l'automation Word. même partielle. if (App. } 10-2 . images. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.23 Copyright 2009 .Current. etc sans l'autorisation expresse de l'auteur. documents. .

seules les touches directionnelles et la barre d'espace sont disponibles. documents. Droits de diffusion permanents accordés à developpez LLC.Application").Documents.24 Copyright 2009 .Add(). etc sans l'autorisation expresse de l'auteur. images.Support total du clavier en plein-écran Une application Trusted offre également le support complet du clavier en plein-écran.Current. Aucune reproduction.Benjamin Roux. à Windows Media Player et à tout plein d'autres fonctionnalités ! 10-3 . Pour rappel. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. } /* automation Word */ Ce code ouvre Word et crée un document.HasElevatedPermissions) { dynamic wordApp = AutomationFactory.CreateObject("Word.com/articles/csharp/silverlight-4 .developpez. lorsqu'une application Silverlight « normale » se trouve en plein écran. wordApp. même partielle. L'automation peut également permettre d'accéder aux périphériques de la machine. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Visible = true. dynamic wordDoc = wordApp. . On pourrait par la suite bien entendu rajouter du texte dans le document. http://broux.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) if (App.

0. un simple UserControl.25 Copyright 2009 .Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 11 .Row="0" VerticalAlignment="Center" Margin="5.0" /> <TextBlock Text="Ben vient de se connecter" Grid. images. même partielle.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" </Grid> </Border> </Grid> Le résultat : .Benjamin Roux.HasElevatedPermissions) { /* Notification API */ NotificationWindow window = new NotificationWindow().API de notification Une application Out Of Browser peut maintenant afficher des notifications style Live Messenger lorsqu'un contact se connecte.Current. documents.0. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.RowDefinitions> <TextBlock Text="Live Messenger" Grid.Width = 200. window. ne peut être faite de ce site et de l'ensemble de son contenu : textes.developpez. if (App. etc sans l'autorisation expresse de l'auteur.Height = 100. <Grid x:Name="LayoutRoot" Background="Transparent"> <Border CornerRadius="15" Background="LightBlue"> <Grid> <Grid. /* affichage de 2 secondes (2000 ms) */ window.com/articles/csharp/silverlight-4 .Show(2000). http://broux. Height = 100 }.RowDefinitions> <RowDefinition Height="25" /> <RowDefinition /> </Grid. Droits de diffusion permanents accordés à developpez LLC. } Avec CustomNotification. Aucune reproduction.Content = new CustomNotification { Width = 200. /* le contrôle à afficher */ window. window.

etc sans l'autorisation expresse de l'auteur.26 Copyright 2009 .developpez.Benjamin Roux. documents. http://broux. même partielle.TextTrimming Silverlight 4 apporte également quelques améliorations par rapport à l'affichage de texte. ».com/articles/csharp/silverlight-4 . Droits de diffusion permanents accordés à developpez LLC. images.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 12 . Aucune reproduction. <TextBlock Text="Voici un texte pas très long mais assez long pour le test" /> <TextBlock Text="Voici un texte pas très long mais assez long pour le test" TextTrimming="WordEllipsis" Width="150 La propriété TextTrimming permet de couper un texte trop long par « . . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

Data. même partielle.Drop += new DragEventHandler(textBox_Drop).Text = info.AllowDrop = true.com/articles/csharp/silverlight-4 . images.Drag&Drop à partir du bureau Silverlight 4 permet maintenant de glisser-déposer un élément du bureau vers notre application Silverlight. ne peut être faite de ce site et de l'ensemble de son contenu : textes. D'autres évènements peuvent également servir comme DragEnter. void MainPage_Loaded(object sender. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Benjamin Roux.ReadToEnd(). Droits de diffusion permanents accordés à developpez LLC.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 13 .27 Copyright 2009 .GetData(DataFormats. } textBox. Très utile pour un Upload de fichier ! . DragEventArgs e) { /* retourne un tableau de FileInfo (multi drag&drop).FileDrop) as FileInfo[])[0]. Ces quelques lignes de code permettent d'afficher le contenu d'un fichier du bureau dans notre TextBox Silverlight. je recupère seulement le premier */ FileInfo info = (e. Aucune reproduction.OpenText(). RoutedEventArgs e) { textBox. DragLeave et DragOver. etc sans l'autorisation expresse de l'auteur. documents.developpez. } textBox. void textBox_Drop(object sender. http://broux.

com/articles/csharp/silverlight-4 .ClientHttp). /* on spécifie que les requêtes sur http passe par la pile réseau ClientHttp */ WebRequest. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Droits de diffusion permanents accordés à developpez LLC. Aucune reproduction. même partielle. client.. // nous voulons utiliser nos propres credentials client. images. WebClient client = new WebClient(). System. "domain").Net. Maintenant avec SL4 il est possible de passer des credentials (identifiants) lors d'une requête avec la pile réseau ClientHttp.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 14 .DownloadStringCompleted += (o.WebRequestCreator.UseDefaultCredentials = false.Benjamin Roux. documents. "password". etc sans l'autorisation expresse de l'auteur. http://broux.developpez. client. e2) => .Authentification Réseau Il arrive parfois que l'on veuille accéder à une ressource sécurisée. .com/maressourceprotegee"))..DownloadStringAsync(new Uri("http://mondomaine.28 Copyright 2009 . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.Credentials = new NetworkCredential("login". client.Browser.RegisterPrefix("http://".

TargetNullValue. même partielle. ElementName=slider}" ScaleY="1" CenterX="50" CenterY="50" /> </Image.jpg" Width="100" Height="100"> <Image.StringFormat.Binding sur DependencyObject Il est désormais possible de réaliser un Binding sur un DependencyObject. documents. On peut donc maintenant binder des propriétés comme l'Angle d'un RotateTransform ou le ScaleX d'un ScaleTransform.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 15 .RenderTransform> <ScaleTransform ScaleX="{Binding Path=Value. Auparavant il fallait passer par un Converter. FallbackValue D'autres propriétés ont également été ajoutées pour améliorer le Binding. images.StringFormat Permet de formater un objet. etc sans l'autorisation expresse de l'auteur.com/articles/csharp/silverlight-4 . Auparavant seul le binding sur des FrameworkElement était supporté. 15-2-1 .developpez.29 Copyright 2009 . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Aucune reproduction.RenderTransform> </Image> <Slider x:Name="slider" Maximum="10" /> 15-2 . Droits de diffusion permanents accordés à developpez LLC. http://broux. <TextBlock Text="{Binding StringFormat='dd-MM-yyyy'}" /> .Amélioration du Data Binding 15-1 . <Image Source="Images/moi.Benjamin Roux. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.

<TextBlock Text="{Binding TargetNullValue=Oups}" /> 15-2-3 . ne peut être faite de ce site et de l'ensemble de son contenu : textes. documents. 15-2-2 .developpez.Now. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. http://broux. images.DataContext = DateTime. <TextBlock Text="{Binding FallbackValue=Oups}" /> .com/articles/csharp/silverlight-4 .Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) this. Aucune reproduction. etc sans l'autorisation expresse de l'auteur. Droits de diffusion permanents accordés à developpez LLC.Benjamin Roux. même partielle.30 Copyright 2009 .FallbackValue Affiche une valeur lorsque l'opération de Binding est incapable de retourner une valeur (mauvais Path par exemple).TargetNullValue Affiche une valeur lorsque la valeur utilisée pour le Binding vaut null.

Benjamin Roux. documents. images.Resources> Maintenant tous les boutons de notre application auront le style définit plus haut. même partielle.31 Copyright 2009 .com/articles/csharp/silverlight-4 . pour cela rien de plus simple : <Button Content="Bouton normal" Style="{x:Null}" /> .Resources> <Style TargetType="Button"> <Setter Property="Background" Value="Blue" /> <Setter Property="Foreground" Value="LightGreen" /> <Setter Property="FontSize" Value="42" /> </Style> </Grid. auparavant présent dans le Silverlight Toolkit. http://broux. ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. <Grid. etc sans l'autorisation expresse de l'auteur.developpez. Il se peut bien entendu que l'on ne veuille pas appliquer le thème à un bouton spécifique.Thèmes implicites Silverlight 4 intègre le système des thèmes implicites.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 16 . Aucune reproduction. Plus besoin de spécifier de clé. Droits de diffusion permanents accordés à developpez LLC.

http://broux.com/MEF .developpez.32 Copyright 2009 . même partielle. Pour plus d'informations : http://www.Benjamin Roux. etc sans l'autorisation expresse de l'auteur.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 17 . ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. images.Managed Extensibility Framework (MEF) Silverlight 4 supporte désormais MEF qui apporte un système de plug-ins. Aucune reproduction.com/articles/csharp/silverlight-4 . documents.codeplex. Droits de diffusion permanents accordés à developpez LLC.

ICommand et Command Silverlight 4 apporte également le support de l'interface ICommand et de la propriété Command. ne peut être faite de ce site et de l'ensemble de son contenu : textes.Benjamin Roux. etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. utiles pour des patterns style MVVM (Model-View-ViewModel).Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 18 . Un travail en vue pour les développeurs de framework MVVM ! .developpez. documents. Les propriétés Command et CommandParameter sont disponibles sur le contrôle ButtonBase et Hyperlink. même partielle. http://broux. images. Aucune reproduction.com/articles/csharp/silverlight-4 . Droits de diffusion permanents accordés à developpez LLC.33 Copyright 2009 .

Divers Des évènements ont également rajoutés sur le contrôle ItemsControl : BeforeLoaded. documents. Loaded. par exemple.34 Copyright 2009 . Aucune reproduction. http://broux. de pouvoir rajouter des animations.com/articles/csharp/silverlight-4 . etc sans l'autorisation expresse de l'auteur.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 19 . Unloaded. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts.developpez. Droits de diffusion permanents accordés à developpez LLC.Benjamin Roux. même partielle. ne peut être faite de ce site et de l'ensemble de son contenu : textes. afin. . images.

ne peut être faite de ce site et de l'ensemble de son contenu : textes. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. images. http://broux.developpez.com/articles/csharp/silverlight-4 .35 Copyright 2009 . Droits de diffusion permanents accordés à developpez LLC. documents.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) 20 . etc sans l'autorisation expresse de l'auteur. même partielle. . et ce n'est pas tout : ce n'est qu'une beta ! En espérant d'autres améliorations dans la version finale.Conclusion Silverlight 4 apporte avec lui son lot de surprises.Benjamin Roux. Aucune reproduction.

même partielle.developpez. documents.Les nouveautés de Silverlight 4 par Benjamin Roux (Retour aux articles) Remerciements Merci à toute l'équipe .com/articles/csharp/silverlight-4 .Benjamin Roux. Merci également à Furr pour sa relecture finale. etc sans l'autorisation expresse de l'auteur. ainsi que Jérôme Lambert pour sa partie sur la webcam et le microphone. http://broux. Aucune reproduction.36 Copyright 2009 . . Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. ne peut être faite de ce site et de l'ensemble de son contenu : textes. images. Droits de diffusion permanents accordés à developpez LLC.NET pour leurs relecture et corrections.

Sign up to vote on this title
UsefulNot useful