Carousel en wpf (usercontrol)

Soyez le premier à donner votre avis sur cette source.

Vue 12 973 fois - Téléchargée 1 718 fois

Description

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 =)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
15 avril 2013

Source trés interessante.
Y aurait-il y moyen d'affecter directement un control user a la place de bouton (obtenir un caroussel de diffrente interface utilisateur)
Merci
Messages postés
89
Date d'inscription
jeudi 17 mars 2005
Statut
Membre
Dernière intervention
26 avril 2012

Petit UP très très tardif si quelqu'un pouvait m'aider un petit peu pour utiliser ce carousel ça serait très sympathique de se part. Merci d'avance
Messages postés
5
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
20 juin 2011

C super
Messages postés
1
Date d'inscription
vendredi 5 février 2010
Statut
Membre
Dernière intervention
27 février 2010

Bon travail.

Quelques idées d'améliorations : mettre une image en fond, des effets 3D, reflets, mettre des images cliquable à la place des boutons.
Messages postés
2
Date d'inscription
mercredi 24 décembre 2008
Statut
Membre
Dernière intervention
5 octobre 2009

Je ne vois pas de problème avec le terme carrousel, c'est bien comme ça que ça se nomme.

Mais si j'avais à l'utiliser, j'inverserais la rotation (les boutons se rapprocheraient de la souris plutôt que de se sauver).
Afficher les 8 commentaires

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.