Cette source contient un UserControl qui permet d'insérer assez aisément un "Carousel" dans son application ainsi qu'un exemple d'utilisation.
Voici une autre source de Carousel 3D beaucoup plus élaborée, réalisée par Zap pour vous faire une meilleure idée de ce qu'est un Carousel.
Le Carousel est plutôt basique mais permet de créer des menus assez originaux à partir d'une liste de FrameworkElement. (Pour les petits étourdis...:
http://msdn.microsoft.com/fr-fr/library/system.windows.frameworkelement.aspx)
Il tourne en fonction de la position du curseur à l'intérieur du UserControl.
Les paramètres qui peuvent être personnalisés sont :
- La liste d'éléments qui est passée dans le constructeur bien entendu (Une liste de Button, d'Image, ou même de Grid).
- Les dimensions de l'ellipse qui forme le Carousel.
- La vitesse de rotation du Carousel.
- L'effet de profondeur des éléments dans le Carousel.
- Une variable permet de simuler un écartement des éléments du Carousel telle une centrifugeuse... (Certes, c'est totalement inutile... Considérez le juste comme une idée farfelue du développeur :p)
Ces variables n'ont pas toutes été mises dans les parametres du constructeur volontairement. C'est uniquement pour simplifier son utilisation... (Et aussi parceque j'avais la flemme de surcharger plusieurs fois le constructeur... Honte à moi.)
L'algorithme utilisé n'est certainement pas très optimisé... Mais il permet néanmoins une animation assez fluide à condition de ne pas exagérer sur le nombre d'éléments contenus dans la liste.
Ceci est la première source que je poste sur CS, donc n'hésitez pas à critiquer le code, à proposer des idées d'améliorations, ou même à demander des informations si vous voulez des éclaircissement sur le code.
Je suis ici avant tout pour apprendre :)
Source / Exemple :
/// <summary>
/// Construit un "Carousel" à partir d'une liste de FrameworkElement
/// </summary>
/// <param name="list">Liste de FrameworkElement à partir de laquelle le "Carousel" sera construit.</param>
/// <param name="radiusX">Rayon Vertical du "Carousel".</param>
/// <param name="radiusY">Rayon Horizontal du "Carousel".</param>
public Carousel(List<FrameworkElement> list, int radiusX, int radiusY)
{
InitializeComponent();
this._list = list;
this._nbItems = list.Count;
this.RadiusX = radiusX;
this.RadiusY = radiusY;
_deepEffect = 10; // Sert à donner un effet de profondeur au Carousel
_initialHeight = 50; // Definit la hauteur initiale des FrameworkElements
_initialWidth = 50; // Definit la largeur initiale des FrameworkElements
_constSpeed = 10000; // Constante qui permet de régler la sensibilité de le vitesse
_time.Interval = new TimeSpan(100000);
_time.Tick += new EventHandler(TimeTick);
_time.Start();
_centerCarousel = new Point(this.Width / 2, this.Height / 2);
_angle = (Math.PI * 2) / _list.Count;
BuildCarousel();
}
Conclusion :
De nombreuses améliorations sont possibles. On pourrait jouer sur l'opacité des objets en arrière plan ou encore créer un reflet sous chaque éléments du Carousel comme on peut le voir dans différentes applications d'Apple. J'ai choisis de ne pas les implémenter dans cette première version pour éviter de trop complexifier la classe, mais si certains les réclames j'apporterai des modifications au UserControl.
J'attends vos avis, vos remarques et vos critiques =)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.