2009-09-10 21 views
7

Tengo un par de cuadros de lista en un WPF de Windows, con Height="Auto" Width="Auto" conjunto en el formulariodiseño de WPF en una ventana

Los tamaños de forma perfectamente en diferentes resoluciones, pero el problema es que cuando se presiona el botón de maximizar una gruesa "Black L" es visible mientras la forma cambia de tamaño. Lo he visto en bastantes aplicaciones de WPF, pero no tuve que resolver el problema hasta ahora.

¿Hay alguna manera de DoubleBuffer the Window, o llamar a SuspendLayout() en WPF mientras se cambian los controles en el formulario? ¿Cómo puedo deshacerme de esta fea L negra?

+1

¿Puedes agregar una captura de pantalla del artefacto visual que estás viendo? No puedo imaginarlo. –

+0

He tratado de imprimir la pantalla, pero Windows no capta el problema, pero hice una maqueta rápida en pintura. http://img16.imageshack.us/img16/403/25229633.png El problema solo ocurre cuando los listbox tienen datos en ellos. Si no agrego ningún dato, entonces el problema no se produce. Es casi como si los listboxes estuvieran recargando los datos cuando se cambia el tamaño de las ventanas – Vault

+0

Parece duplicado a esta pregunta: http: // stackoverflow.com/questions/555326/how-can-i-make-resizing-wpf-windows-less-laggy –

Respuesta

3

Citando uno de la reciente Hanselminutes:

Ian Griffiths: ... Ahí está la señal de Win32 que es un Win32 bucle de mensajes ordinaria, y WPF mensajes piscinas fuera de eso y los pone en su propia taco y luego tratar con él en su propia tiempo dulce, en parte porque quiere ser capaz de cambiar el orden de los acontecimientos a medida que vienen en. se dará prioridad a ciertos cosas por encima de procesamiento de entrada, por ejemplo, y que, por el camino, es por qué se obtiene el poco extraño repinte manejo de cambiar el tamaño de las aplicaciones de WPF, se habrán dado cuenta usted consigue un poco poco de espacio en blanco que aparece temporalmente cuando se cambia el tamaño de una ventana es porque está reconociendo el evento cambio de tamaño antes de que realmente realmente hace algo con eso y luego las pinturas se desincronizan ligeramente con con lo que normalmente está allí. Entonces, es una cola de mensajes win32 pero no es en realidad la cola de mensajes principal en WPF y eso es todo tipo de implementación detalles que el operador trata de ocultar tanto como sea posible.

Parece relevante para su problema, aunque no conozco una solución completa. Quizás, debería intentar cambiar algunas prioridades de Dispatcher?

+0

gracias por la sugerencia, intentaré que – Vault

0

Vault, creo que esto puede tener algo que ver con la virtualización de la interfaz de usuario que realizan los listboxes. La virtualización permite que el cuadro de lista cargue solo los elementos de la interfaz de usuario que se están representando. El cuadro de lista lo hace con la ayuda de VirtualizingStackPanel como su ItemsPanelTemplate.

Así que mi suposición parece ser ... que la maximización de la ventana habría empujado las cajas de lista para generar más elementos de la interfaz de usuario y el retraso habría dado lugar a la 'L' negra.

Puede eliminar la virtualización y verificar si la 'L' negra aún aparece. Por cierto, la virtualización es de hecho una cosa "buena", y apagarla es generalmente una mala idea.

+1

Eliminar la virtualización no haya funcionado. Para ser sincero, he visto este problema en bastantes aplicaciones de WPF, y los desarrolladores siempre llevan el problema a la parte posterior de la cola, ya que se considera de baja prioridad. – Vault