我需要在常规 Gtk# 窗口内创建一个透明度放置在另一个图像之上的图像。第一个图像应该能够响应鼠标点击。
简单的方法通常是将 Image 放入 EventBox - 和窗口内。但是,EventBox 默认情况下是不透明的,因此即使 png 图像本身具有透明区域,在 EventBox 内时,它也会在图像周围显示为方形不透明背景。
我知道 EventBox 可以使用Cairo变得透明,但到目前为止还不能做到这一点。
任何人都可以提供一个简短的 C# 示例来使 EventBox 透明吗?
我需要在常规 Gtk# 窗口内创建一个透明度放置在另一个图像之上的图像。第一个图像应该能够响应鼠标点击。
简单的方法通常是将 Image 放入 EventBox - 和窗口内。但是,EventBox 默认情况下是不透明的,因此即使 png 图像本身具有透明区域,在 EventBox 内时,它也会在图像周围显示为方形不透明背景。
我知道 EventBox 可以使用Cairo变得透明,但到目前为止还不能做到这一点。
任何人都可以提供一个简短的 C# 示例来使 EventBox 透明吗?
回答我自己的问题...:
解决方案非常简单,而我正在寻找复杂的代码来重绘小部件......所需要做的就是将 EventBox.VisibleWindow 成员设置为“false”(默认情况下为“true”)。比不绘制事件框,如果事件框内的图像有透明区域,它们将显示下面的内容。
在下面的例子中,它是:
mapBox.VisibleWindow = false;
和
pinBox.VisibleWindow = false;
据我所见,Z-Order(哪个 Widget 在其上)由屏幕上的绘制顺序决定(当未绘制 EventBox 时,EventBox.GdkWindow.Lower() 或 Raised()成员没有做任何事情)。
例子:
// Showing a map in an invisible EventBox
EventBox mapBox = new EventBox();
mapBox.Visible = true;
mapBox.VisibleWindow = false;
fixed1.Add(mapBox);
fixed1.Move (mapBox, 0, 0);
Image mapImage = new Image("map.png");
mapImage.Visible = true;
mapBox.Add (mapImage);
// Showing a pin image with transparent areas, in an invisible EventBox, on top of the map
EventBox pinBox = new EventBox();
pinBox.Visible = true;
pinBox.VisibleWindow = false;
fixed1.Add(pinBox);
fixed1.Move (pinBox, 60, 60);
Image pinImage = new Image("redpin.png");
pinImage.Visible = true;
pinBox.Add (pinImage);