Question

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

 exemple d'image

Je rencontre des artefacts de transparence (la barre violette est en fait violette sous le vert, et parfois elle tire au-dessus, etc.) et cela semble tout simplement un peu inutile. J'ai donc décidé de créer le mien, mais maintenant, je suis un peu paralysé sur la façon de le faire. Dois-je utiliser DrawingContext dans OnRender de FrameworkElement ou existe-t-il quelque chose de plus simple? Existe-t-il un ensemble de règles générales concernant la prise de contrôle par vous-même?

J'ai envisagé de passer à un graphique à secteurs, car il est facile de les trouver, mais il est temps que je fasse quelque chose de commercial.

Merci!

Était-ce utile?

La solution

Je ne sais pas trop comment vous voulez que la barre de progression associe différents progrès, mais si, disons, les progrès les plus avancés se situent au bas de l'index z et que les progrès les moins avancés sont au sommet, alors je le ferais. quelque chose sur les lignes de ceci:

1) Je créerais probablement un contrôle utilisateur pour ce nouveau progresbar.

2) Il aurait une propriété appelée NumberOfProgresses, qui est liée à un tableau contenant le statut de cette progression.

3) Chaque progression serait représentée par un élément Border (ou peut-être quelque chose de plus approprié dans l'arbre visuel), car il s'agit d'un simple contrôle wpf avec une propriété background. La propriété background est définie sur un style progressif et la couleur de progression peut être liée dans le style pour indiquer la propriété borderbrush de la bordure. Il est facile de définir la couleur de la progression.

4) Le contrôle utilisateur aurait une méthode UpdateProgress qui prend en paramètre la valeur en pourcentage et l’index de la progression dans le tableau.

5) Au fur et à mesure que les progrès sont mis à jour, vous pouvez simplement calculer la largeur appropriée (largeur réelle * pourcentage du contrôle utilisateur) pour la bordure et jouer avec l'index Z pour l'afficher en haut / en bas, ou empiler les bordures. horizontalement, définissez la progression la moins longue comme étant la première, puis pour le reste de la progression, vous devez soustraire les longueurs des progressions précédentes pour obtenir le même effet.

De cette manière, il n’y aurait ni artefacts induits par la transparence, ni OnRender () ... Remarquez, dans WPF, il ne devrait y avoir aucune raison de déconner avec OnRender, comme avec le principe requis dans WinForms avec OnPaint. Configurez simplement les éléments via le code pour obtenir le look souhaité et laissez WPF en rendre le rendu;)

Je peux toutefois imaginer un problème avec ce contrôle utilisateur. Vous devez indiquer à l'utilisateur quelle couleur appartient à quelle progression. Mais cela vous ramènerait probablement à la case départ, ce qui signifie qu'il est préférable / plus simple d'afficher plusieurs barres de progression.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top