TechDays 2010 : Les nouveautés du WPF 4 (glory details)

A l’image du .NET 4.0, le WPF 4.0 ne contiendra pas de nouveauté révolutionnaire. Globalement cette version tend à re-uniformiser le WPF, Silverlight et Surface. Malgré tout cette version marque une étape importante pour le WPF puisqu’elle apporte le multitouch et offre un framework relativement mature et complet. En d’autre terme c’est le moment de passer au WPF et abandonner le Windows Forms des familles 😉
Le Framework .NET 4.0 sera théoriquement disponible le 12 avril 2010, d’ici là vous pouvez tester toutes ces fonctionnalités avec la version RC de Visual Studio :

Microsoft Visual Studio 2010 RC:
http://www.microsoft.com/downloads/details.aspx?FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a

Attention  la RC bogue sur l’IntelliSense et un patch est disponible:
http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=26662

Améliorations cosmétiques

Layout Rounding

Le WPF fonctionne graphiquement indépendamment du DPI, ce qui conduit ponctuellement à l’apparition d’artefacts de rendu (bordures transparentes ou floutés). Heureusement est arrivé la propriété UseLayout Rounding, qui permet de réaliser automatiquement un arrondi sur la position et la taille du control durant les étapes Measure et Arrange. Par défaut cette nouvelle propriété est à false.

<StackPanel Orientation=”Horizontal” Width=”200″>

<Rectangle Width=”65.5″ Margin=”10″ Height=”1″Fill=”Red” UseLayoutRounding=”True”/>

<Rectangle Width=”65.5″ Margin=”10″ Height=”1″ Fill=”Red” UseLayoutRounding=”False”/>

</StackPanel>

Easing Animation

Avec les easing functions il est possible d’ajouter des formules mathématiques prédéfinies à vos animations. Il existe 11 fonctions : BackEase, BounceEase, CircleEase, CubicEase, ElasticEase, ExponentialEase, PowerEase, QuadraticEase, QuarticEase, QuinticEase, SineEase. Chaque fonction propose 3 EasingMode (EaseIn, EaseOut, EaseInOut) permettant d’avoir animations non linéaires très facilement.

Fenêtre de dialogue pour les fichiers changée

Précédemment le WPF utilisait systématiquement le style de fenêtre XP pour la fenêtre de dialogue fichier (ouvrir et sauver). Il existait bien des moyens de passer outre, mais cela restait de la bidouille. Maintenant le style de cette fenêtre est automatiquement celui de l’OS.

Amélioration des performances

Cached Composition

Le BitmapCache permet de sauvegarder sous forme de bitmap une partie du visual tree et ainsi ne pas repasser par l’étape de Render sur cette branche. Il en résulte un gain de performance proportionnel à la surface d’affichage mise en cache.

L’intéraction avec l’utilisateur sur cette zone est totalement re-cablée et donc conservée. Seul inconvénient, comme l’UIElement mi en cache n’est plus re-rendu les transformations qui lui seront appliquées, seront effectuées sur un bitmap et non plus sur des vecteurs, d’où une baisse de la qualité visuelle. Il est toutefois possible de demander un re-cache à un niveau de Zoom spécifique.  Pour activer cette fonctionnalité il faut renseigner l’attribut CacheMode avec un objet BitmapCache.

Support du Pixel Shader 3

Le WPF 3.5 SP1 avait introduit le support du ShaderEffect, pour beaucoup (dont moi) cette fonctionnalité était de loin la plus intéressante de ce SP1. Avec le WPF 4 la gestion des Pixel Shader est étendue à la version 3.0. A titre indicatif le PS 3.0 signifie beaucoup plus d’instructions, de registres…

Et pour tester vos pixel shaders : http://www.shazzam-tool.com/

Extension de fonctionnalités préexistentes

Les Bindables Run

Précédemment les éléments Run (le conteneur de texte bas niveau), n’acceptaient pas par défaut d’être bindé sur l’attribut Text, maintenant c’est possible. L’intérêt ? Réaliser facilement des chaines totalement customisables tout en Xaml.

Brush pour les prompts et champs de sélection

En WPF 4 la Textbox propose 2 nouvelles propriétés CaretBrush et SelectionBrush permettant de définir facilement la couleur de zones mises en surbrilliances et la couleur du prompt.

<TextBox Text=”Nouveauté WPF” SelectionBrush=”RED” CaretBrush=”Green”/>

Déploiement Full Trust des Xbap

Précédemment quand on souhaitait déployer en full Trust un Xbap une erreur « Trust Not Granted » était envoyée. La solution couramment utilisée était d’installer sur le poste utilisateur un certificat et signer le Xbap avec ce même certificat.

Maintenant au lieu de retourner systématiquement une erreur, l’utilisateur pourra décider s’il veut installer ou non le Xbap.

Dictionnaire orthographique personnalisable

Dans les précédentes versions de WPF la possibilité d’ajouter un dictionnaire personnel n’était pas offert. Il était toutefois possible moyennant pas mal de code de circonvenir le problème. La fonctionnalité est maintenant ajoutée.

<RichTextBox FontSize=”12″ SpellCheck.IsEnabled=”true” >

<SpellCheck.CustomDictionaries>

<sys:Uri>MonDictionnaire.lex</sys:Uri>

</SpellCheck.CustomDictionaries>

</RichTextBox>

Nouvelles fonctionnalités

MultiTouch

La version 4 du Framework .NET apporte le support de la programmation MultiTouch. Techniquement l’API .NET s’appuie sur des fonctionnalités natives de Windows 7 (ou plus récent). Il est toutefois possible de simuler le MultiTouch sur Windows Vista avec une surcouche (http://www.codeplex.com/wikipage?ProjectName=MultiTouchVista)

Dorénavant tous les UI Eléments proposeront des évènements Touch et Manipulation. En programmation MultiTouch on parle plus de clic mais de Contact/Touch. Les Evènements de contact sont TouchDown, TouchEnter, TouchLeave, TouchMove, TouchUp.

Afin de simplifier le développement, Microsoft a encapsulé un certain nombre de gestes courant en MultiTouch tels que déplacer, zoomer, tourner. Il vous sera possible de vous abonner à des évènements de manipulation qui vous retourneront les opérations de transformation qu’a voulu réaliser l’utilisateur. Les évènements de manipulation sont : ManipulationStarted, ManipulationDelta, ManipulationStarting, ManipulationCompleted.

La table Surface (v2) n’aura plus à utiliser ses contrôles spécifiques (les SurfaceButton etc..) mais pourra passer par l’API WPF 4 standard.

Jumplists

Les jumplists sont une fonctionnalité de Windows 7, permettant d’afficher un menu contextuel très riche quand on clique sur l’application dans la barre des tâches. Il est dorénavant possible de totalement les customiser directement en WPF grâce à l’élément TaskbarItemInfo qui peut s’insérer dans la propriété éponyme des contrôles Window.

<Window.TaskbarItemInfo>

<TaskbarItemInfo

Description=”My TaskbarItemInfo”

Overlay=”..\Resources\powerButton.ico”>

<TaskbarItemInfo.ThumbButtonInfos>

<ThumbButtonInfo

Command=”Cut”

CommandTarget=”{Binding ElementName=textBox}”

Description=”{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}”

DismissWhenClicked=”False”

ImageSource=”..\Resources\cut.png” />

Binding sur les Dynamic Objects

Le C# 3.0 avait apporté LINQ, le C# 4.0 apporte la programmation dynamique. Pour faire simple, il est dorénavant possible de créer des objets dynamiques qui communiquent avec des langages dynamiques. Le WPF 4 gère aussi ces objets dynamiques, le binding sur leurs propriétés est totalement fonctionnel.

Contrôles : DatePicker, Calendar, Datagrid

Trois contrôles essentiels ont « enfin » été intégrés : DataGrid, DatePicker et Calendar, et sont quasiment similaires à leur contrepartie Silverlight.

Apparemment une collection de huit contrôles de plus sera proposée par Microsoft en téléchargement. Nommé Bag O’Tricks, elle contiendra les contrôles : AnimatingTilePanel, ColorPicker, InfoTextBox, ListPager, NumericUpDown, Reveal, TransitionsPresenter, TreeMapPanel.

Un nouveau contrôle WPF Ribbon sera proposé peu de temps après la sortie du WPF 4. Le fameux menu qui a fait son apparition dans Word 2007.

Visual State Manager

Initialement développé pour le Silverlight, le Visual State Manager fait maintenant son apparition dans le WPF. Conceptuellement le VisualStateManager s’articule sur les 4 concepts suivant :

  • Les Parts : les éléments nommés contenus dans les control template.
  • Les States : L’apparence du contrôle sous certaines circonstance (l’état logique)
  • Les Transitions : indiquent comment le contrôle passe d’un visual state à un autre. Cela permet de passer de manière moins abrupte d’un état à un autre.
  • Les State Groups : Collection nommée d’états mutuellement exclusifs.

La classe VisualStateManager est responsable de la gestion des states, state groups et de la logique de transition entre les states. La propriété attachée VisualStateGroups contient tous les Visual states et les transitions. La méthode GoToState() est utilisé pour changer d’état.

Nombre de vue : 49

AJOUTER UN COMMENTAIRE