透明或半透明面板控制

时间:2010-09-23 17:03:34

标签: c# transparency transparent

有没有办法让面板透明或半透明?我没有找到任何适当的属性来设置面板的透明度。

我还尝试使用网格进行WPF控制(网格背景和控件背景设置为透明)并将其放在普通的Windows窗体上,但是当我将此控件放在正常的Windows窗体(不是WPF)上时,我不会获得适当的透明度。

3 个答案:

答案 0 :(得分: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 :(得分:1)

不幸的是,WinForms本身或支持透明度并且很难自己实现。

如果您想要一个透明的面板,可以让您“看到”表单,请查看at this article,告诉您将Panel的TransparencyKeyBackColor设置为某个内容比如Fuscia。使用面板中的文本/其他内容,此效果可能看起来不太好。

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

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

答案 2 :(得分:0)

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

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

修改

同意@Callum Rogers关于使用WPF的问题。面板上的文字直接显示边缘(请参见屏幕截图中的标签)。但是,如果您需要将其快速添加到现有的Win Forms应用程序中,并且不需要直接在面板上显示文本,那么它可能适合您。

alt text