wpf - prueba - opacidad diesel
DibujoEjecuciĆ³n visual con Opacidad=0 (4)
El más eficiente parece ser establecer la opacidad en mis pruebas. Otro enfoque simple es volver a dibujar las imágenes que se ven afectadas.
using (DrawingContext dc = RenderOpen()) {} //Hide this visual
Y luego vuelve a dibujar cuando vuelvan a ser visibles.
La representación de un contexto de dibujo en blanco parece ser muy rápido. Pero si tiene imágenes complicadas, podría tomar tiempo devolverlas cuando se vuelvan visibles.
Si tengo un DrawingVisual en WPF con Opacidad = 0, ¿es suficiente para que no se dibuje? Tenemos cientos de DrawingVisuals en un lienzo, y actualmente estamos configurando Opacity = 0 en los visuales que no se deben mostrar, y quería asegurarme de que no se produzca ningún rendimiento de representación para representar un DrawingVisual con Opacity = 0.
ACTUALIZACIÓN: descubrí a través de pruebas que hay una sobrecarga cuando Opacidad = 0, pero dado que DrawingVisual no tiene una propiedad de Visibilidad, no sé cómo más podría decir que no se muestre a menos que realmente lo elimine de la visualización árbol, por lo que cualquier sugerencia es bienvenida.
La mejor manera de verificarlo sería establecer la Visibilidad a Visibilidad.Colapsed, y ver si hay diferencias en el rendimiento del dibujo.
Visibility.Colapsed asegura que el elemento no sea visible, pero también que no participará en las transferencias Arrange, Measure y Render de la UI, mientras que un elemento con Opacity = 0 podría participar en todas las pasadas.
¿Por qué no simplemente eliminar el visual de la lista visual de niños? Cuando necesite ser visible, agréguelo.
Resolví un problema muy similar al usar el DrawingGroup y agregar o eliminar objetos Drawing del DrawingGroup, ya que estos debían mostrarse u ocultarse. La clave es organizar sus objetos de Dibujo de tal forma que sean fáciles de administrar y comprendan cómo agregarlos y eliminarlos del DrawingGroup. Recuerde que desea agregar y eliminar objetos de dibujo del DrawingGroup.Children. Así que use DrawingGroup.Children.Add (Drawing) y DrawingGroup.Children.Remove (Drawing). Tendrá que mantener una lista externa de los objetos de Dibujo que agregue / elimine al DrawingGroup para hacer esto con éxito.
Ver DrawingGroup Class y Drawing Class
Utilicé esta técnica con gran efecto dibujando una Imagen (mapa de bits) en el primer niño en mi instancia de DrawingGroup y luego agregué y quité objetos de Dibujo a esta instancia de DrawingGroup para superponer polígonos, caminos, texto, etc. en la parte superior del dibujo.
"Dibujo" o "borro" en la imagen agregando o quitando objetos de Dibujo a la instancia del Grupo de Dibujo. DrawingGroup se trata como un único dibujo y, por lo tanto, cualquier escalado, paneo u otras manipulaciones afectarán a todos los objetos Drawing dentro del DrawingGroup.