c# - Gtk# 使 EventBox 透明的示例

标签 c# mono gtk transparency cairo

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

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

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

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

最佳答案

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

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

在下面的例子中,它是:
ma​​pBox.VisibleWindow = false;

pinBox.VisibleWindow = false;

据我所知,Z 顺序(哪个 Widget 在哪个 Widget 之上)由屏幕上的绘制顺序决定(当未绘制 EventBox 时,EventBox.GdkWindow.Lower() 或Raising() 成员没有执行任何操作)。

示例:

// 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);

关于c# - Gtk# 使 EventBox 透明的示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12203107/

相关文章:

c# - 您会用什么作为业务验证层?

c# - MVC5 Autofac : The view found at was not created

c# - Linux:Mono 安装和错误

c - gtk2中的gtk_idle_add()和gtk_main_context_invoke()有什么区别?

java - 如何将前端(C#、HTML、JQuery)与后端(JAX-RS(Jersey)和JAVA)进行通信?

c# - 非 UI 线程上的 WPF 调度程序

macos - 在 OSX 上的 Monodevelop 中调试不太有效

c++ - GTK+上的中小型开源项目示例

GtkScrolledWindow 容器向其子级发送带有负坐标的大小分配

c# - 改进 If else 语句编码