Los bordes transparentes de WPF hacen que la interfaz de usuario deje de volver a dibujarse

StackOverflow https://stackoverflow.com/questions/122857

Pregunta

Como seguimiento a mi pregunta anterior, Me pregunto cómo utilizar correctamente las ventanas transparentes.Si configuré mi ventana para usar transparencia, ocasionalmente parecerá que la interfaz de usuario deja de responder.Lo que realmente está sucediendo es que la interfaz de usuario simplemente no se actualiza como debería.No se producen animaciones, las páginas no parecen navegar;sin embargo, si observa al depurador haciendo clic en botones, enlaces, etc.realmente funcionan.Minimizar y restaurar la ventana "pone al día" la interfaz de usuario nuevamente y el usuario puede continuar trabajando hasta que vuelva el comportamiento.

Si elimino los bordes transparentes, el comportamiento no ocurre.¿Estoy haciendo algo mal o hay alguna otra configuración, código, etc.?¿Qué debo implementar para trabajar correctamente con bordes transparentes?

Aquí está mi declaración de ventana para el código que falla.

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF APplication" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="True"
    MinHeight="300" MinWidth="400" WindowStyle="None" >

Y el código que no muestra el comportamiento.

<Window x:Class="MyProject.MainContainer"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WPF Application" Height="600" Width="800"    
    xmlns:egc="ControlLibrary" Background="{x:Null}"
    BorderThickness="0"
    AllowsTransparency="False"
    MinHeight="300" MinWidth="400" WindowStyle="None" >
¿Fue útil?

Solución 2

Creo que finalmente encontré una solución.Por todo lo que he leído, este problema no debería ocurrir con XP SP3 y .NET 3.5 SP1, pero sí ocurre.

El ejemplo de esta publicación de blog muestra cómo usar las funciones de la API de Win32 para crear una ventana de forma irregular, que es lo que estoy haciendo.Después de reelaborar mi ventana principal para usar estas técnicas, las cosas parecen estar funcionando como se esperaba y el comportamiento no ha regresado.

También cabe señalar que la razón por la que el autor recomienda este método se debe a problemas de rendimiento con WPF y las ventanas transparentes.Si bien creo que puede ser mejor en .NET 3.5 SP1, no fue tan difícil de implementar y debería funcionar mejor.

Otros consejos

¿Está utilizando .NET 3.0 o .NET 3.5 en Windows XP SP2?Si es así, se trata de un problema conocido con la API de ventana transparente que se ha solucionado en .NET 3.5 y SP3 de XP (y creo que SP1 de Vista).Básicamente, cuando configura AllowTransparency en True, la canalización de WPF debe representarse en modo solo de software.Esto provocará una degradación significativa del rendimiento en la mayoría de los sistemas.

Lamentablemente, lo único que puede hacer para solucionar este problema es actualizar a .NET 3.0 SP1 (incluido en .NET 3.5) e instalar el paquete de servicio adecuado para Windows.Tenga en cuenta que las ventanas transparentes son aún más lentas, pero no tan malas.Puedes encontrar una discusión más profunda. aquí.

Estoy ejecutando Windows XP Pro SP3 y uso .NET 3.5 SP1.También verifiqué que el proyecto tiene como objetivo la versión 3.5 del marco.

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