Les bordures transparentes WPF entraînent l'arrêt de la mise à jour de l'interface utilisateur

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

Question

Pour faire suite à ma question précédente , je suis se demandant comment utiliser correctement les fenêtres transparentes. Si j'ai configuré ma fenêtre pour utiliser la transparence, l'interface utilisateur semble parfois cesser de répondre. En réalité, l’interface utilisateur ne se met pas à jour comme il se doit. Les animations ne se produisent pas, les pages ne semblent pas naviguer. Cependant, si vous regardez le débogueur en cliquant sur les boutons, les liens, etc., cela fonctionne réellement. Minimiser et restaurer la fenêtre "rattrape" l'interface utilisateur à nouveau et l'utilisateur peut continuer à travailler jusqu'à ce que le comportement revienne.

Si je supprime les bordures transparentes, le comportement ne se produit pas. Est-ce que je fais quelque chose de mal ou y a-t-il un autre paramètre, code, etc. que je dois implémenter pour travailler correctement avec les bordures transparentes?

Voici ma déclaration de fenêtre pour le code qui échoue.

<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" >

Et le code qui ne présente pas le comportement

<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" >
Était-ce utile?

La solution 2

Je pense avoir enfin trouvé une solution de contournement. D'après tout ce que j'ai lu, ce problème ne devrait pas se produire avec XP SP3 & amp; .NET 3.5 SP1, mais c’est le cas.

L'exemple tiré de cet article de blog montre comment utiliser les fonctions de l'API Win32 pour créer une fenêtre de forme irrégulière, ce que je suis en train de faire. Après avoir retravaillé ma fenêtre principale pour utiliser ces techniques, tout semble fonctionner comme prévu et le comportement ne s’est pas encore matérialisé.

Il est également intéressant de noter que la raison pour laquelle l'auteur recommande cette méthode est due à des problèmes de performances avec WPF et les fenêtres transparentes. Bien que je pense que ce soit mieux dans .NET 3.5 SP1, ce n’était pas si difficile à mettre en oeuvre et devrait mieux fonctionner.

Autres conseils

Utilisez-vous .NET 3.0 ou .NET 3.5 sur Windows XP SP2? Si tel est le cas, il s'agit d'un problème connu lié à l'API de fenêtre transparente qui a été corrigé dans .NET 3.5 et SP3 de XP (et je pense que SP1 de Vista). En règle générale, lorsque vous définissez la valeur AllowsTransparency sur True, le pipeline WPF doit être rendu en mode logiciel uniquement. Cela entraînera une dégradation significative des performances sur la plupart des systèmes.

Malheureusement, la seule chose à faire pour résoudre ce problème consiste à effectuer une mise à niveau vers .NET 3.0 SP1 (inclus dans .NET 3.5) et à installer le service pack approprié pour Windows. Notez que les fenêtres transparentes sont toujours plus lentes, mais pas aussi mauvaises. Vous pouvez trouver une discussion plus approfondie ici .

J'utilise Windows XP Pro SP3 et j'utilise .NET 3.5 SP1. J'ai également vérifié que le projet cible la version 3.5 du framework.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top