3 votes

WPF Personnalisé Dessiner Plusieurs Barres de Progression

Lors du traitement d'un groupe d'éléments, je voulais afficher une image unifiée de l'état du groupe, j'ai donc essentiellement créé une grille de plusieurs barres de progression avec des arrière-plans transparents et des premiers plans de différentes couleurs tous dans la même cellule.

image d'exemple

Je rencontre quelques artefacts de transparence (la barre violette est en fait violette sous le vert, et parfois elle se dessine par-dessus, etc.) et cela semble un peu gaspilleur. Alors, j'ai décidé de créer le mien, mais maintenant j'ai un peu de paralysie sur la façon de le faire. Dois-je utiliser le DrawingContext dans le OnRender de FrameworkElement, ou y a-t-il quelque chose de plus simple? Y a-t-il un ensemble de règles générales en matière de création de votre propre contrôle?

J'ai envisagé de passer à un graphique circulaire car ils sont faciles à trouver, mais il est grand temps que je fasse quelque chose de plus original.

Merci!

1voto

Marko Points 707

Je ne suis pas tout à fait sûr de comment vous envisagez que la barre de progression combine différents progrès, mais si l'on suppose que le progrès le plus avancé est en bas de l'indice Z et que le progrès le moins avancé est en haut, alors je ferais quelque chose dans ce sens :

1) Je créerais probablement un contrôle utilisateur pour cette nouvelle barre de progression.

2) Il aurait une propriété appelée NumberOfProgresses, liée à un tableau contenant l'état des progrès.

3) Chaque progrès serait représenté par un élément de type Border (ou peut-être quelque chose de plus adapté dans l'arbre visuel), car il s'agit d'un contrôle wpf simple avec une propriété de fond. La propriété de fond serait définie sur un style de progression agréable et la couleur de la progression pourrait être liée dans le style à la propriété BorderBrush du bord. Cela faciliterait la définition de la couleur de la progression.

4) Le contrôle utilisateur aurait une méthode UpdateProgress qui prendrait en paramètres la valeur en pourcentage et l'index du progrès dans le tableau.

5) Au fur et à mesure que les progrès sont mis à jour, vous pouvez soit simplement calculer la largeur appropriée (largeur réelle du contrôle utilisateur * pourcentage) pour le bord et jouer avec l'indice Z pour l'afficher en haut/en bas, ou empiler les bords horizontalement, définir le progrès le moins avancé en premier, puis pour le reste des progrès, vous devriez soustraire les longueurs des progrès précédents pour obtenir le même effet.

Ainsi, il n'y aurait aucun artefact de transparence induit et pas de OnRender()... Notez bien, en WPF, il ne devrait y avoir aucune raison de manipuler OnRender ceci et OnRender cela, comme cela était nécessaire dans WinForms avec OnPaint. Il suffit de configurer les éléments via du code pour obtenir l'apparence souhaitée et laisser WPF faire son rendu ;)

Je peux imaginer un problème avec ce contrôle utilisateur cependant. Vous devriez fournir des retours à l'utilisateur sur quelle couleur correspond à quel progrès. Mais cela vous ramènerait probablement à la case départ, ce qui signifie qu'il est préférable/plus simple d'afficher simplement plusieurs barres de progression.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X