2010-09-23 4 views
2

Y a-t-il un moyen de rendre un panneau transparent ou semi-transparent? Je n'ai trouvé aucune propriété appropriée pour définir la transparence pour un panneau. J'essayais aussi de faire un contrôle WPF avec la grille (l'arrière-plan de la grille et l'arrière-plan du contrôle étaient réglés sur transparent) et de le placer sur une fenêtre normale, mais quand je mets ce contrôle sur Windows Form (pas WPF) n'obtenez pas la transparence appropriée.Contrôle de panneau transparent ou semi-transparent

+0

Un panneau transparent nécessite le drapeau de style natif WS_EX_TRANSPARENT (CreateParams). Je ne pense pas que vous le fassiez sortir d'un contrôle WPF. Assez ironique. –

Répondre

0

Je ne suis pas sûr de rendre le panneau semi-transparent, mais je sais que vous pouvez utiliser la propriété TransparencyKey du formulaire pour créer des sections complètement transparentes.

Par exemple, définissez la propriété TransparencyKey du formulaire sur Fuchsia, puis définissez le BackColor du panneau sur Fuchsia et créera une zone transparente sur le formulaire.

Edit:

d'accord avec @Callum Rogers à aller avec WPF. Le texte directement sur le panneau montre des franges (voir l'étiquette dans la capture d'écran). Toutefois, si vous devez ajouter rapidement cette application à une application Win Forms existante et que vous n'avez pas besoin d'afficher directement le texte sur le panneau, cela pourrait fonctionner pour vous.

alt text

1

Malheureusement, la transparence est pas nativement ou bien pris en charge dans WinForms et il est difficile de vous mettre en œuvre.

Si vous voulez un panneau transparent qui vous permet de « voir à travers » la forme, jetez un oeil at this article, qui vous indique définir à la fois TransparencyKey et BackColor à quelque chose comme Fuscia du Groupe spécial. Avec du texte/d'autres choses dans le panneau, cet effet peut ne pas sembler si bon.

Si vous voulez un panneau transparent ou translucide qui montre la forme ci-dessous prennent un regard at this SO question.

J'utiliseraient WPF tout le chemin, si vous êtes en mesure de l'utiliser sous une forme maintenant.

2

Si votre écran est à peu près statique, vous pouvez le faire pour obtenir la semi-transparence (Source):

class SeeThroughPanel : Panel 
{ 
    public SeeThroughPanel() 
    { 
    } 

    protected override CreateParams CreateParams { 
     get { 
      var cp = base.CreateParams; 
      cp.ExStyle |= 0x00000020; 
      return cp; 
     } 
    } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     //base.OnPaint(e); 
     e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(50, 0, 0, 0)), this.ClientRectangle); 
    } 
} 

Mais, cette approche n'est pas sans problème si vous avez besoin de rendu dynamique sur votre semi-transparent contrôle. Voir this question que j'ai posté. J'espère que ça répondra un jour.

+1

C'est très utile! –

Questions connexes