Pregunta

Al procesar un grupo de elementos, quería mostrar una imagen unificada del estado del grupo, por lo que esencialmente hice una cuadrícula de una serie de barras de progreso con fondos transparentes y varios primeros planos de colores, todo en la misma celda.

 imagen de muestra

Me estoy topando con algunos artefactos de transparencia (la barra morada es en realidad morada debajo del verde, y algunas veces dibuja sobre la parte superior, etc.) y parece un poco inútil. Entonces, decidí hacer la mía, pero ahora tengo un poco de parálisis sobre cómo hacerlo. ¿Utilizo el DrawingContext en OnRender de FrameworkElement, o hay algo más simple? ¿Existe un conjunto de reglas generales cuando se trata de hacer tu propio control?

Pensé en cambiar a un gráfico circular, ya que son fáciles de conseguir, pero es hora de hacer algo que no esté disponible.

¡Gracias!

¿Fue útil?

Solución

No estoy muy seguro de cómo pretende que la barra de progreso combine diferentes progresos, pero si el progreso más avanzado se encuentra en la parte inferior del índice z y el progreso mínimo en la parte superior, lo haría. algo en la línea de esto:

1) Probablemente crearía un control de usuario para este nuevo progresbar.

2) Tendría una propiedad llamada NumberOfProgresses, que está vinculada con una matriz que contiene el estado de dichos progresos.

3) Cada progreso estaría representado por un elemento de borde (o quizás algo más adecuado en el árbol visual), porque es un simple control wpf con una propiedad de fondo. La propiedad de fondo se establecería en un bonito estilo de progreso y el color de progreso se puede vincular al estilo para decir la propiedad borderbrush del borde. Facilitando el ajuste del color del progreso.

4) El control de usuario tendría un método UpdateProgress que toma el valor porcentual y el índice del progreso en la matriz como parámetros.

5) A medida que se actualicen los progresos, puede calcular el ancho apropiado (porcentaje * del ancho real del control del usuario) para el borde y jugar con el índice Z para que se muestre en la parte superior / inferior, o apilar los bordes horizontalmente, establezca el progreso mínimo a lo largo como primero, luego, para el resto de los progresos, tendrá que restar las longitudes de los progresos anteriores para obtener el mismo efecto.

De esta manera no habría artefactos inducidos por la transparencia ni OnRender () ... Eso sí, en WPF no debería haber ninguna razón para meterse con OnRender esto y OnRender que, como se requería en WinForms con OnPaint. Simplemente configure los elementos a través del código para obtener el aspecto que desea, y deje que WPF haga su representación;)

Aunque puedo imaginar un problema con este control de usuario. Tendría que proporcionar comentarios al usuario sobre qué color pertenece a qué progreso. Pero eso probablemente lo llevaría de vuelta al punto de partida, lo que significa que es mejor / más simple simplemente mostrar múltiples barras de progreso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top