Blog de Julien Dollon (MVP)

Project Manager / Architecte / Formateur

Julien Dollon

Architecte et formateur pour I'FORM/Exakis et Full Professor SUPINFO.

Responsable de la communauté Dotnet-France, Scrum Master pour le projet AHEAD ainsi que nommé Most Valuable Professional, je participe activement à la communauté Microsoft.


 

Mon CV de Consultant/Formateur .NET

Mon Transcript de Formateur .NET

J'interviens en consulting et formation sur les technologies .NET, ALM/TFS, Agilité/Scrum, SharePoint et SQL Server





 
 
 
 
Official INETA Logo
 
IForm


[WPF] Les nouveautés de WPF 4 béta 1

Avec Visual Studio 2010 vient l’arrivée du Framework 4. Comme de nombreuses technologies, WPF hérite d’évolutions surtout orientées sur le multi-touch et le développement avec Windows 7.

wpfmultitouch1 

Nous sommes actuellement à la version WPF4 béta 1. Des choses ont été annoncées mais ne sont pas encore disponibles. Dès la Béta 1 nous avons:

  • L’ajout du contrôle DataGrid et DatePicker venant du toolkit
  • Le easing function pour les animations (comme en Silverlight 3)
  • Le support du multitouch
  • Le déploiement avec Client Profile

Voici ce qu’il devrait arriver avec la béta 2:

  • L’intégration totale avec le développement windows 7
  • Le visual state manager
  • La possibilité d’avoir des XBAP en Full-Trust
  • etc…

Le développement Multi-Touch avec WPF4

Pour cet article, le matériel utilisé est un HP IQ820 Touch Smart permettant le dual touch grâce à des leds infrarouges.

Donc pas de détection de rotation du doigt et limitation à deux contacts en même temps.

A noter que le multi-touch de WPF4 est basé sur les mêmes API que Surface et sont donc compatibles.

Afin de permettre le multi-touch dans WPF4, nous avons:

  • De nouveaux événements ont été ajoutés aux UIElements:

wpf4-2

  • De nouveaux contrôles tel que le ScatterView et la mise à jour pour le support du multi-touch du ScrollViewer

Premier test avec une image:

Après avoir ajouté votre Image dans un canvas, vous remarquerez qu’il existe une nouvelle propriété nommée “ManipulationMode” permettant de définir le type de multitouch que vous souhaitez capturer tels que:

  • Translation en X et en Y
  • Rotation
  • Zoom/Dezoom
  • Ou tout simplement toutes les manipulations possibles.
   1: <Canvas>
   2:     <Image Source="Desert.jpg" Width="100" Height="100" ManipulationMode="All" />
   3: </Canvas>

Puis il faut appliquer une matrice à notre image. Cette matrice nous permettra par la suite de modifier les coordonnées de l’image lors des manipulations.

   1: <Window x:Class="WpfApplicationMultitouch.Window1"
   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:         Title="Window1" Height="600" Width="600">
   5:     <Canvas>
   6:         <Canvas.Resources>
   7:             <MatrixTransform x:Key="Matrice">
   8:                 <MatrixTransform.Matrix>
   9:                     <Matrix OffsetX="150" OffsetY="150"/>
  10:                 </MatrixTransform.Matrix>
  11:             </MatrixTransform>
  12:         </Canvas.Resources>
  13:         <Image Source="Desert.jpg" RenderTransform="{StaticResource Matrice}" Width="300" Height="300" ManipulationMode="All" />
  14:     </Canvas>
  15: </Window>

Maintenant direction l’événement “ManipulationDelta” de votre Image. Cet événement est déclenché dès qu’on manipule un UIElement et nous donne le delta des transformations réalisées.

Il faut donc mettre notre matrice à jour suivant les nouvelles coordonnées passées en paramètres de l’événement.

Voici le code, tiré du training kit de VS 2010:

   1: private void Image_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
   2: {
   3:     //On récupère les nouvelles coordonnées par rapport au canvas principal
   4:     Manipulation m = e.GetDeltaManipulation(cnv);
   5:  
   6:     //On récupère l'image manipulée
   7:     Image monImage = e.OriginalSource as Image;
   8:  
   9:     //On en déduit sa matrice, on lui appliquera toutes les transformations
  10:     var matrix = ((MatrixTransform)monImage.RenderTransform).Matrix;
  11:  
  12:     var orgCenter = new Point(monImage.ActualWidth / 2, monImage.ActualHeight / 2);
  13:     
  14:     //Translation
  15:     matrix.Translate(m.Translation.X, m.Translation.Y);
  16:  
  17:     var center = matrix.Transform(orgCenter);
  18:  
  19:     //Rotation
  20:     matrix.RotateAt(m.Rotation, center.X, center.Y);
  21:  
  22:     center = matrix.Transform(orgCenter);
  23:  
  24:     //Zoom/Dezoom
  25:     matrix.ScaleAt(m.Scale, m.Scale, center.X, center.Y);
  26:  
  27:     //Application des modifications
  28:     monImage.RenderTransform = new MatrixTransform(matrix);
  29:     e.Handled = true;
  30: }

A ce stade, votre image est compatible avec le multi-touch. Voici la vidéo du projet:

wpf4-4Cliquez pour lire la vidéo 

Autre exemple avec le ScatterView de WPF, disponible de base dans Microsoft.Windows.Controls.

   1: <Window x:Class="WpfApplicationMultitouch.Window2"
   2:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   3:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   4:         xmlns:s="clr-namespace:Microsoft.Windows.Controls;assembly=ScatterView"
   5:         Title="Window2" Height="300" Width="300">
   6:     <Grid>
   7:         <s:ScatterView>
   8:             <Image Source="Koala.jpg"/>
   9:             <Image Source="Tulips.jpg"/>
  10:         </s:ScatterView>
  11:     </Grid>
  12: </Window>
wpf4-3 

Développement Windows 7

Comme je l’ai dit précédemment, WPF 4 va intégrer en natif la possibilité d’interagir avec Windows 7 avec:

  • La taskbar
  • Le ribbon
  • Les dialogues windows 7
  • Le File Explorer

Pour le moment, vous êtes obligés d’utiliser le Windows API Code Pack 0.90. A suivre de prêt donc !

EN-w7-comp_rgb_L_3

Posted: Jun 28 2009, 19:47 by juliend | Comments (9) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: .NET | WPF/Silverlight | Général

Comments

julienc said:

Trop bien SmileSmile !

# June 28 2009, 19:52

davyp said:

Article génial, le multi touch c'est quand même quelque chose.

# June 28 2009, 20:34

Njko said:

Impressionnant! Mais que va-t-il rester du SDK Surface si WPF en reprend une des main feature?!

# June 28 2009, 23:31

Julien Dollon said:

WPF et Surface utilise la même API, cependant le SDK Surface apporte beaucoup plus de contrôles multi-touch pensé pour la table et permet d'accèder à des choses propre au système.

J'ai hâte de voir comment vont évoluer ces deux produits.

# June 29 2009, 00:32

Clement said:

Bonjour,
Etant équiper d'un HP touchsmart tx2, je suis intéresser par le développement multi-touch.
J'arrive grâce au transformation de Matrice a des redimensionnement, rotation déplacement d'image.
J'aimerai savoir si il est possible de faire ces modification sur 2 image en meme temps?
Je pose cette question ici car je trouve tres peut de sujet autour du multi-touch.
Si tu a des piste de recherche ou quelque idée merci de me les faire parvenir.

Je développe avec visual studio 2010 beta 1 sur un windows 7 RTM.

Merci d'avance pour tes conseils.

# October 06 2009, 19:24

juliend said:

Bonjour Clement,
Comment veux tu transformer deux images en même temps (zoom par exemple) alors que tu n'as qu'un double touch (et non multitouch).
Dans tous les cas, l'abonnement aux events ManipulationDelta des deux images n'est pas suffisant ?
A+

# October 07 2009, 09:56

Pitch France said:

Bonjour Julien,

J'ai essayé de tester ton exemple avec VS2010 Beta 2 mais je n'arrive pas à charger la librairie "Microsoft.Windows.Control" afin d'avoir le controle "ScatterView".

Y'a-t-il d'autres pré-requis mise à part avoir Windows 7 et VS2010B2 pour réussir ton exemple ? (ex: SDK Win7, APICodePack,...)

En te remerciant d'avance pour tes infos.

PS: Encore bravo pour votre site car il m'aide vraiment dans mes dev.

# January 07 2010, 00:37

juliend France said:

Bonjour Pitch,
Malheureusement j'ai eu besoin moi aussi de refaire cette exemple et j'ai découvert que la librairie qui été disponible dans le SDK VS2010 béta 1 à disparu...
La béta 2 ne l'implémente plus...
Je pense qu'il va falloir attendre un peu que les équipes migre tout ca.
Bon courage pour la suite

# January 07 2010, 00:41

Clement France said:

Bonjour julien
je suis désoler de n'avoir pas répondu plus tôt mais je penser que je recevrai un mail lors de ta réponse.

Mon ordinateur est bien équiper d'un moniteur multitouch.
Je pense que sur la bêta 1 ce que je voulais faire été tout simplement impossible.
Mais sur la bêta 2 il a suffi d'inscrire mes immage au evenement manipulationStarting, manipulationdelta et manipulationinnertia pour arriver a les modifier en meme temps.

Désoler pour l'orthographe

clement

# February 16 2010, 16:15

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading

captcha

*