studio - wpf c# tutorial
ventana wpf completamente negro (9)
Vendo una aplicación WPF, en una máquina del cliente (de varios cientos) toda la ventana de la aplicación es negra, ¿alguien sabe qué está pasando?
La máquina ejecuta Windows XP con .net 3.5SP1, el adaptador gráfico es GeForce 6200 con dos monitores (la desactivación de un monitor no resuelve el problema).
La configuración de "Configuración de compatibilidad" en "256 colores" resuelve el problema (pero no es una solución viable, necesito más colores para que la aplicación se vea bien).
La aplicación es yaTimer ( http://www.nbdtech.com/yaTimer/ ), tiene una ventana de Chrome personalizada basada en las técnicas descritas en esta publicación http://blogs.msdn.com/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx en la sección "Office 2007 sin Aero".
Si alguien me puede dar una idea de lo que está pasando, estaré muy agradecido.
Gracias.
Estaba teniendo el mismo problema con una aplicación WPF al realizar la depuración. En Depuración - Opciones, navegue a Depuración - General y anule la selección de "mostrar herramientas de ejecución en la aplicación" en "Habilitar herramientas de depuración de la interfaz de usuario para XAML". La próxima vez que ejecute la aplicación no se superpondrá con el formulario.
Hace poco tuve un problema similar con una ventana negra en WPF, en una solución VB 2010 / .Net 4.0 donde todas las demás ventanas funcionaban bien. El culpable resultó ser la manera en que estaba activando la visibilidad, usando los siguientes 3 comandos a continuación. La solución fue eliminar todas menos la primera línea, la que tiene la referencia de la propiedad Visibilidad (la eliminación de solo la línea .Show causaría que se renderizara correctamente la primera vez, pero luego en negro):
Application.MisbehavingBlackWindow.Visibility = System.Windows.Visibility.Visible
Application.MisbehavingBlackWindow.Show()
Application.MisbehavingBlackWindow.Activate()
Nunca antes había tenido un problema con esta serie de comandos para Mostrar una ventana de WPF, así que supongo que me metí en una rutina y nunca me molesté en comprobar si era la forma óptima de hacerlo. Por costumbre, acabo de pegar el código según sea necesario para invocar ventanas. Todavía funciona para todas las demás ventanas en todas las demás soluciones que he escrito, pero hizo que esta ventana en particular se volviera negra. Al principio solo ocurría intermitentemente en una rutina particular, luego se volvía permanente por razones desconocidas. Ninguna de las siguientes líneas de código con las que experimenté hizo alguna diferencia:
Application.MisbehavingBlackWindow.InvalidateVisual()
Application.MisbehavingBlackWindow.InvalidateArrange()
Application.MisbehavingBlackWindow.UpdateLayout()
Application.MisbehavingBlackWindow.BringIntoView()
Application.MisbehavingBlackWindow.WindowState = WindowState.Minimized
Application.MisbehavingBlackWindow.WindowState = WindowState.Normal
Eliminar todos los controles de la ventana no tuvo ningún efecto; todavía se volvería negro si estuviera poblado solo por un solo TextBlock. Por otro lado, surgió un patrón después de que intenté ejecutarlo desde otras rutinas, particularmente si pegué el primer bloque de código dentro de uno que abrió otra ventana. Si lo inserté justo antes de un bloque de código como el de abajo, la ventana se volvió negra; Si lo inserté después, no lo hizo.
Application.OtherWindow.Visibility = System.Windows.Visibility.Visible
Application.OtherWindow.Show()
Application.OtherWindow.Activate()
La solución funciona (hasta ahora) incluso si la ventana está oculta usando un comando Window.Hide (). Ya tenía uno incluido en un evento Sub dentro de la ventana ofensiva, que se activaba cuando la ventana perdía el foco. Al volver a activar el uso de la propiedad Visibilidad, se sigue haciendo el truco sin requerir ningún cambio en esa declaración .Ocultar.
Espero que esto ayude a cualquiera que se encuentre con este problema irritante. Hasta ahora, la mayoría de las soluciones que he visto dispersas en Internet parecen estar basadas en temas como Windows Themes, tarjetas gráficas y otras variables externas, pero aparentemente podemos solucionar al menos algunos ejemplos de esto en nuestro código .Net. detrás.
Intente instalar el último paquete de DirectX en la máquina cliente.
Nosotros ( www.novamind.com ) teníamos varios clientes en el pasado que tenían problemas similares en los que la aplicación no se dibujaba correctamente o en absoluto. Las razones fueron:
- El controlador gráfico no está actualizado.
- El tema de Windows está dañado. Cambiar el tema de Windows a algo diferente y viceversa, resolvió el problema.
- Windows se está ejecutando en una máquina virtual. La mayoría de las máquinas virtuales tienen una función de aceleración de hardware experimental que a menudo no es compatible con las aplicaciones WPF. - Apagar la aceleración de hardware resuelve el problema.
Esto también puede ayudar:
- Vuelva a instalar .NET Framework - a veces la instalación está dañada.
- Asegúrese de que todas las actualizaciones recientes de Windows estén instaladas.
Espero que esto ayude. Buena suerte.
Si estás usando una máquina virtual, desactiva la aceleración 3D :)
Suena similar al problema que tuve la otra noche y que publiqué aquí:
Pregunta: WPF - Sin contenido generado
Compruebe los controladores de la tarjeta de video como una posibilidad
Tengo este problema solo con el GlassFrame habilitado en el menú de la ventana.
Intente establecer GlassFraneThickness en 0 y su ventana se mostrará de nuevo. Sin embargo, perderás el marco de cristal, pero mejor que una aplicación negra.
<shell:WindowChrome.WindowChrome>
<shell:WindowChrome CaptionHeight="32" GlassFrameThickness="0" ResizeBorderThickness="5" CornerRadius="0" />
</shell:WindowChrome.WindowChrome>
Tal vez usted también puede tratar de forzar la ventana para volver a pintar. En mi caso, el contenido de la ventana se mostraba cuando movía la ventana al otro monitor o fuera de la ventana gráfica y volvía a entrar, por lo que parece que una repintación hace el trabajo.
En el Microsoft.Windows.Shell Sourcecode hay una función _FixupWindows7Issues () (en la clase WindowChromeWorker ) que debería solucionar el problema de acuerdo con su comentario, pero obviamente no ...
Tuve el problema de anular la plantilla de la ventana. Me di cuenta de que si usted, pero el estilo de ventana heredado en Themes / Generic.xaml, funciona. Pero en cualquier otro recurso obtendrás una ventana negra. (VS 2008 - WPF 3.5)
Una posible solución es forzar la representación en modo software:
http://msdn.microsoft.com/en-us/library/system.windows.interop.rendermode.aspx
En 3.5, esto se puede configurar por ventana http://msdn.microsoft.com/en-us/library/system.windows.interop.hwndtarget.rendermode%28VS.90%29.aspx y en 4.0 existe adicionalmente una configuración de todo el proceso: http://msdn.microsoft.com/en-us/library/system.windows.media.renderoptions.processrendermode.aspx