.net 具有透明子问题的Windows窗体自定义面板

.net 具有透明子问题的Windows窗体自定义面板,.net,winforms,transparency,panel,.net,Winforms,Transparency,Panel,我创建了一个自定义面板(继承自面板),该面板覆盖OnPaint方法,以使用LinearGradientBrush绘制内部矩形 public void PaintPanel() { // Re-calculate the CalculatePanelHeight(); Graphics _g = this.CreateGraphics(); Point _startPoint = new Point(0, m_TopAreaHeight); Size

我创建了一个自定义面板(继承自面板),该面板覆盖OnPaint方法,以使用LinearGradientBrush绘制内部矩形

public void PaintPanel()
{
    // Re-calculate the 
    CalculatePanelHeight(); 
    Graphics _g = this.CreateGraphics();

    Point _startPoint = new Point(0, m_TopAreaHeight);
    Size _size = new Size(Width, m_BtmAreaHeight);
    Rectangle _btmRect = new Rectangle(_startPoint, _size);
    LinearGradientBrush _btmGradBrush = new LinearGradientBrush(_btmRect,                     BackColorBottom, BackColorBottom2, LinearGradientMode.Vertical);
        _btmGradBrush.GammaCorrection = true;
        _g.FillRectangle(_btmGradBrush, _btmRect);
        ...
}

protected override void OnPaint(PaintEventArgs e)
{
    PaintPanel();
    base.OnPaint(e);
}
然而,有两个怪癖:

  • 每当将任何具有透明背景的控件拖动到自定义面板中时,其背景将变为白色

  • 我的自定义面板不支持透明背景(每当我将其中一种渐变颜色设置为透明时,颜色将变为白色)

  • 有人能提供一些见解吗


    谢谢。

    Windows窗体中不存在真正的透明度。这是一个Windows限制,在子窗口上不支持它。这里有一些解决方法,比如WS_EX_透明窗口样式和winforms内置的一些对透明背景色的支持。它们都要求控件的父控件在控件窗口中绘制自身,并提供背景像素

    当您开始重叠控件时,会出现这种情况,您会看到父控件(通常是窗体)的背景,而不是重叠控件的背景。如果窗体的背景色是白色,那么您确实会看到白色,而不是中间控件的渐变

    这方面没有实际的解决办法。如果你想要真正的透明度,那么你应该考虑WPF。它不使用窗户,只使用几层油漆。透明度现在是微不足道的,只是不要画画