.net 具有透明子问题的Windows窗体自定义面板
我创建了一个自定义面板(继承自面板),该面板覆盖OnPaint方法,以使用LinearGradientBrush绘制内部矩形.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
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。它不使用窗户,只使用几层油漆。透明度现在是微不足道的,只是不要画画