我有一个利用Windows.Forms创建GUI的XNA项目。我们的GUI由左侧面板和右侧面板组成。他们都有一个图像放在他们身上(我们称之为面板图像)。这些图像的按钮上面有图像。现在面板图像没有完全覆盖面板。现在我们要做的是让面板不可见或透明,这样你才能看到面板图像。在下面的图片中,我圈出了我想要透明/不可见的东西。正如您在项目的上半部分所看到的,它已经看起来很透明,但这只是因为它与XNA场景中的背景融为一体。在面板在地面上的底部,您可以看到面板如何比面板图像延伸得更远。那么,有没有人知道如何让这些部分变得不可见/透明。
好吧,我们已经搞乱了制作面板颜色Color.Transparent,洋红色(XNA透明色)和那些尝试没有奏效。欢迎提出任何意见和建议。
以下是设置面板的代码:
this.pnlLeftSide.BackgroundImage = global::Referenceator_UI.Resources.LeftBar;
this.pnlLeftSide.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None;
this.pnlLeftSide.Controls.Add(this.btnScreenShot);
this.pnlLeftSide.Controls.Add(this.btnScale);
this.pnlLeftSide.Controls.Add(this.btnMove);
this.pnlLeftSide.Controls.Add(this.btnRotate);
this.pnlLeftSide.Controls.Add(this.btnSelect);
this.pnlLeftSide.Location = new System.Drawing.Point(0, 0);
this.pnlLeftSide.Name = "pnlLeftSide";
this.pnlLeftSide.Size = new System.Drawing.Size(197, Screen.PrimaryScreen.WorkingArea.Height);
this.pnlLeftSide.Dock = DockStyle.Left;
this.pnlLeftSide.BackColor = controlColor; //this what we want invisible/transparent
- 感谢stackoverflow社区
答案 0 :(得分:1)
尝试设置面板的Region
属性。您可以手动创建必要的Region
对象(通过枚举描述可见多边形的线条)或使用一些将透明度颜色键转换为Region
的图像(例如,轻松搜索 - https://stackoverflow.com/questions/886968/how-do-i-convert-an-images-transparency-into-a-region)。< / p>
由于面板的几何图形似乎不太复杂,您可以按照以下方式手动创建Region
:
using(var gp = new System.Drawing.Drawing2D.GraphicsPath())
{
// Here goes series of AddLine() calls.
// You must
// gp.AddLine(0, 0, leftPanel.Width, 0);
// ...
gp.CloseFigure();
return new Region(gp);
}
请注意,使用此方法您将获得锐利的边缘(即使它有效)。考虑使用XNA渲染所有GUI。