使 EventBox 透明的 C# Mono.Cairo 示例

使 EventBox 透明的 C# Mono.Cairo 示例

我需要在常规 Gtk# 窗口内创建一个透明图像,该图像放置在另一个图像之上。第一个图像应该能够响应鼠标点击。

简单的方法通常是将图像放在 EventBox 内 - 并放在窗口内。但是,EventBox 默认不透明,因此即使 png 图像本身有透明区域,当在 EventBox 内时,它会显示为图像周围的方形不透明背景。

我知道 EventBox 可以使用以下方法变得透明开罗,但目前还无法做到这一点。

有人可以提供一个简短的 C# 示例来使 EventBox 透明吗?

谢谢!

答案1

回答我自己的问题...:

解决方案非常简单,而我正在寻找复杂的代码来重新绘制小部件……只需将 EventBox.VisibleWindow 成员设置为“false”(默认情况下为“true”)。然后不会绘制 EventBox,如果 EventBox 内的图像有透明区域,它们将显示下面的内容。

在下面的例子中,它是:
地图框.可见窗口 = 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);

相关内容