Gtk#示例使EventBox透明

时间:2012-08-30 17:49:26

标签: c# mono gtk transparency cairo

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

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

我知道可以使用 Cairo 使EventBox变得透明,但到目前为止还无法做到这一点。

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

1 个答案:

答案 0 :(得分:2)

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

解决方案非常简单,而我正在寻找复杂的代码来重绘小部件...... 所有需要做的就是将EventBox.VisibleWindow成员设置为'false'(默认为'true')。不会绘制EventBox,如果EventBox中的图像有透明区域,它们将显示下面的内容。

在下面的例子中,它是:
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);