如何在gtk中使一个小部件位于其他小部件的前面

How to make a widget in the front of ohter widgets in gtk

我想在容器(固定)的前面制作一个小部件(自定义小部件),就像在网页设计中设置 "z-index" 一样。但是我没有找到可以做到的方法。

例如

Button bt1 = new Button();
Button bt2 = new Button();
bt1.WidthRequest = 100;
bt2.WidthRequest = 100;
Fixed fx1 = new Fixed();
fx1.put(bt1,0,0);
fx1.put(bt2,50,0);

然后bt2会覆盖bt1,因为bt2是最后添加的widget。现在我想让 bt1 覆盖 bt2,即 bt1 在 fx1 的前面。如何操作?

有一个类似的问题,其答案无法解决。 GTK# Widget in front of another widget

我自己解决了!

使用 GdkWindow.Raise() 如此处指出:Stacking widgets in Gtk+

在我的示例中,使用 bt1.GdkWindow.Raise() 将产生容器中 bt1 的前置操作的效果。

请注意,如果小部件不是 "window"(由于我对 Gtk# 的了解有限,我并不确切知道 window 的详细定义)这不会不工作。

在这种情况下,小部件可以封装在 'EventBox' 中,而应该在其 GdkWindow 上调用 Raise() (类似于 "ModifyBg(...)" 在某些小部件上不起作用,但确实如此对于事件框)。