2010-08-06 4 views
3

Pourquoi est-ce que je dois définir la propriété WindowStyle sur None sur un formulaire WPF pour obtenir la transparence, mais dans Winforms je peux le faire sur n'importe quelle forme, et conserver les bordures, les boutons standard, etc. Il est clair que l'API supporte cela, donc je ne suis pas sûr de ce qui est spécial à propos de WPF qui pourrait en faire un problème.Fenêtre transparence dans WPF vs Winforms

Je suppose que WPF passe par des cerceaux DirectX ou OpenGL, alors que Winforms ne fait que définir l'alpha pour la fenêtre via l'API, mais je pourrais être loin de la base.

Répondre

2

Convenu, c'est la main lourde:

private void VerifyConsistencyWithAllowsTransparency(WindowStyle style) 
    { 
     if (AllowsTransparency && style != WindowStyle.None) 
     { 
      throw new InvalidOperationException(SR.Get(SRID.MustUseWindowStyleNone)); 
     } 
    } 

WPF utilise exactement le même mécanisme pour mettre en œuvre ce que Windows Forms, fenêtres en couches. Il n'y a aucune raison évidente que cela ne fonctionne pas de la même manière dans WPF. L'extrait de code, levé de Window.cs, l'exclut simplement. Il existe cependant un indice de la propriété UsesPerPixelOpacity:

Lorsque vous activez l'opacité par pixel, le système ne dessine plus la zone non-client. En effet, UsesPerPixelOpacity a pour but d'afficher une interface utilisateur de niveau supérieur non rectangulaire qui fonctionne dans des scénarios d'interopérabilité et d'afficher les échecs de la zone non client rectangulaire à cette fin.

"scénarios d'interopération", je suppose.

Questions connexes