Un des types de layouts particulièrement en vogue dans les applications RIA est le Coverflow (le nom provient d'un mode de navigation introduit par Apple dans iTunes, iPod et iPhone).
Depuis la sortie de Silverlight, de nombreux contrôles ont été publiés par la communauté mais aucun n'est parfait pour le moment à mes yeux. Après un peu de réflexion j'en suis donc venu à m'établir une Feature-list et de lancer un projet CodePlex. Les fonctionnalités que je souhaite implémenter sont les suivantes :
- Scalabilité : le contrôle doit pouvoir contenir des milliers d’éléments sans broncher. Pour ceci je compte mettre en place de la Virtualisation de conteneurs
- Data-Binding : le contrôle doit être un ItemsControl, accepter une ItemsSource et un ItemTemplate, et supporter le Binding TwoWay sur ses SelectedIndex et SelectedItem
- Styling/Templating : Le contrôle doit être aisément personnalisable, exposer des VisualStates et fournir une expérience Design Time parfaite. De plus, il doit fournir un moyen à son ItemTemplate de connaitre l’état de sélection de l’élément courant
- Extensible : Je n’ai jamais vu 2 projets ou le client voulait exactement le même algorithme de layout : plus ou moins d’éléments visibles, rotation des éléments différente, effet de perspective ou à plat… Le meilleur moyen de proposer quelque chose qui s’adapte vraiment à chaque cas, est d’externaliser la logique de layout et de proposer au développeur l’utilisant de fournir sa propre implémentation sans avoir à implémenter toutes les taches annexes (entrées utilisateur, logique de sélection, virtualisation…)
- Expérience “Out of the Box” (sans style / layout particulier) suffisante pour prototyper des applications qui en jettent
- Modèle de manipulations riche (sélection par clic, au clavier, par “panning”, touch…). Fournir une API de manipulation extensible (yet to be designed pour le moment, mais j’ai quelques idées a ce sujet)
Mes plans sont d’avoir une version stabilisée d’ici la RC de Silverlight 4 avec toutes les fonctionnalités décrites ci-dessus, en License MS-PL.
D’ici-là, je laisserai à disposition une page de demo régulièrement mise à jour avec les nouveautés apportées. Un projet Codeplex est aussi en préparation, je pousserai les sources dessus après avoir peaufine 2-3 choses…
Bien entendu, tout feedback sur le look-and-feel et proposition de fonctionnalité est fortement encouragé…
Simon
Update : Le projet est Codeplexifié à l’adresse suivante : http://slflow.codeplex.com/. La qualité du code est pas encore clean, ca nécessite un peu de refactoring, de testing et de doc pour attendre un niveau de qualité acceptable, mais vous pouvez commencer à jouer avec et à faire du Feedback :-).