Menu

2010 Posts

Dependency Property : Trucs et astuces

Lors des développements en WPF on a souvent besoin d’écrire des propriétés de dépendances pour nos objets. En dehors de la déclaration simple de notre propriété, il y a quelques éléments qui méritent d’être connue. Dans l’exemple qui va suivre, je vais écrire une propriété de dépendance appelée « MaProp », qui sera un Int32 et qui ne peut prendre des valeurs que de 1 à 100.

1 – Déclaration de la propriété

Il faut bien évidement déclarer sa propriété, dans Visual Studio il y un a snipet pour ça : propdp.

public static readonly DependencyProperty MaPropProperty = DependencyProperty.Register("MaProp", typeof(int), typeof(MaClasse), new UIPropertyMetadata(1));

Dans les conventions de nommage, on ajoute toujours « Property » sur l’a déclaration statique, ensuite pour initialiser celle-ci, on peut donner une valeur par défaut dans le dernier paramètre, ici 1.

Read More

Projet CodePlex : Surface 2D Engine

Je vous présente mon deuxième projet CodePlex, un moteur 2D pour XNA 3.1 et Microsoft Surface. Il contient un moteur pour facilement faire des projets XNA sous Microsoft Surface, beaucoup de choses ont été abstraite pour vous simplifier la tâche. Vous avez les sources, c’est libre de droit, j’attend vos retours avec impatience, enjoy 🙂

Ca se télécharge ici : http://blacksurface2dengine.codeplex.com/

Read More

Surface : Contrôle Stick Analogique

Je vous propose aujourd’hui un petit contrôle Microsoft Surface (WPF) pour vos projets. C’est un stick analogique tactile, vous pouvez télécharger les sources ci-dessous :

Black.StickAnalogique (9,24 kb)

Le contrôle est très simple à utiliser, il possède deux propriétés de dépendances : ValueX et ValueY qui représentent une valeur entre -1 et 1. Ces valeurs correspondent à la distance parcouru par le stick analogique, respectivement sur l’axe X et sur l’axe Y par rapport au centre. Il faut noter par contre que les axes sont inversés, à savoir :

– Sur l’axe X, -1 correspond à la position gauche et 1 à la position droite.

– Sur l’axe Y, -1 correspond à la position haute et 1 a la position basse.

Il y a aussi deux événements, ValueXChange et ValueYChange qui se déclenchent à chaque modification de ValueX pour le premier et ValueY pour le second.

J’espère que ce composant vous sera utile, je le rajouterais dans le toolkit bientôt.

Read More

SurfaceItemsControl comment ça marche ?

Il arrive souvent lors d’un développement Microsoft Surface, de devoir créer des contrôles personnalisés pour affiner l’expérience NUI (Natural User Interface) de notre application. La plupart du temps on va créer un SurfaceUserControl ou un CustomControl, mais d’expérience il arrive souvent de devoir créer un contrôle de contenu qui fonctionne à la manière d’une ListBox, ComboBoxou ScatterView. Je vais donc expliquer comment créer ce genre de contrôle en héritant d’un SurfaceItemsControl (ItemsControl en WPF, la démarche est identique).

Concept de base :

Un SurfaceItemsControl n’est qu’un container qui permet d’afficher et de gérer des éléments de diverses nature et de les afficher et les traiter d’une façon particulière. Comme pour tout container Surface (ou WPF), la propriété ItemsSource permet, par Binding notamment, de lui adresser la liste des éléments à traiter. Au moment de traiter la liste de ses éléments, l’ItemsControl va encapsuler chaque élément de la liste (chaque élément de l’arbre logique) dans un container de type ContentControl afin de les traiter de façon unifiée dans son arbre visuel, cependant il restera accessible en l’état dans l’arbre logique. Là ou ça deviens intéréssant, c’est que l’on peut redéfinir ce container et lui donner des comportements que nous jugeons utiles.

Voici les différentes étapes pour implémenter correctement ce type de contrôle.

Read More

Lire du son avec DirectX

Aujourd’hui je vous propose une petite classe que j’ai écrite et qui permet de jouer un son en WPF (et donc par extension sur Microsoft Surface). En effet, par expérience je n’était pas satisfait des objets (MediaElement, SoundPlayer, etc.) fournis par défaut dans le Framework .Net car soit ils leurs manquent des fonctionnalités (par exemple la durée du média pour le SoundPlayer), soit ils sont compliqués a mettre en place (MediaElement qui doit forcément être dans l’arbre visuel). J’ai donc pris le problème a bras le corps et décidé d’écrire un petit bout de code avec les assemblies DirectX Managées.

La classe est simple et fait des opérations basiques, a savoir lire un fichier audio sur le disque dur et nous notifie quand elle commence la lecture ou l’arrête. On peut bien sûr allez plus loin, mais je donne ici plus un squelette qu’une classe ultra complète. Pour l’utiliser, il faut installer le SDK DirectX pour pouvoir utiliser l’assembly Microsoft.DirectX.AudioVideoPlayback. Si vous ne désirez pas installer le SDK je vous la fournis ci-dessous.

DirectAudioPlayer (3,95 kb)

AudioVideoPlayback (20,98 kb)

L’avantage de cette petite classe c’est qu’en passant par DirectX, on bénéficie des codecs installés sur son poste car cela passe par DirectShow. En espérant que cela vous sera utile.

Read More

Surface : Affine2DInertiaProcessor

Pour faire suite à mon dernier billet, je vais maintenant expliquer une autre classe du SDK Microsoft Surface, l’Affine2DInertiaProcessor. Cette classe permet de gérer de l’inertie sur des objets. Comme pour l’Affine2DManipulationProcessor, cette classe s’utilise quasiment pareil.

La principale utilisation de cette classe réside dans l’ajout d’une inertie sur un objet suite à une manipulation (le plus souvent grâce à un Affine2DManipulationProcessor) pour ajouter du réalisme dans son interface NUI (Natural User Interface).

Le code ci-dessous vous montre comment utiliser l’Affine2DInertiaProcessor après une manipulation.

Read More