2010-09-23 217 views
2

有没有什么办法让面板透明或半透明?我没有找到任何合适的属性来为面板设置透明度。我也试图使用网格(网格背景和控制背景设置为透明)的WPF控件,并将其放置在正常的Windows窗体上,但是当我把这个控件放在正常的Windows窗体(而不是WPF)上时,我不会没有适当的透明度。透明或半透明面板控制

+0

透明面板需要WS_EX_TRANSPARENT原生样式标志(CreateParams)。我不认为你会从WPF控件中获得。很讽刺。 – 2010-09-23 17:55:59

回答

0

我不确定如何使面板变为半透明,但我知道您可以使用表格的TransparencyKey属性来创建完全透明的部分。

例如,将表单的TransparencyKey属性设置为Fuchsia,然后将面板的BackColor设置为Fuchsia,并且它将在窗体上创建一个透明区域。

编辑:

与@Callum罗杰斯同意关于与WPF去。直接显示在面板上的文字显示边框(请参阅屏幕截图中的标签)。但是,如果您需要快速将其添加到现有的Win Forms应用程序,并且不需要在面板上直接显示文本,它可以为您工作。

alt text

1

不幸的是,透明度不是在本地的WinForms或很好的支持,是难以实现自己。

如果你想有一个透明的面板,让您的形式是“看透”,看看at this article,它告诉你设置这两个小组的TransparencyKeyBackColor喜欢的东西Fuscia。对于面板中的文本/其他内容,此效果可能看起来不太好。

如果你想要一个透明或半透明的面板,显示下面的表格看看at this SO question

我会一路使用WPF,如果你现在可以在表单中使用它。

2

如果您的显示器是非常静态的,你可以做到这一点,实现半透明度(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); 
    } 
} 

但是,这种方法也不是没有问题控制。请参阅我发布的问题this。希望有一天能得到答案。

+1

这非常有用! – 2014-12-31 02:20:31