我正在尝试通过继承Gtk.Bin来创建自定义GTK Widget。我没有使用Stetic GUI构建器。这个小部件将包含几个标准的Gtk小部件(VBox,标签,按钮等)。
public class MyWidget : Gtk.Bin
{
public MyWidget : base ()
{
build ();
}
private void build ()
{
VBox vbox1 = new Vbox (true, 0);
vbox1.PackStart (new Label ("MyWidget"), true, true, 0);
this.Add (vbox1);
}
}
同时,当我将自定义窗口小部件添加到主窗口时,我什么都看不到。显示其他控件的窗口,为此自定义窗口小部件分配空间。我希望在它的空间看到标签“MyWidget”,但没有任何显示。 我通过调试器中的代码逐步调用它,但它在运行时都被调用了。
任何帮助都将不胜感激。
答案 0 :(得分:4)
需要覆盖:
protected override void OnSizeAllocated (Gdk.Rectangle allocation)
{
if (this.Child != null)
{
this.Child.Allocation = allocation;
}
}
protected override void OnSizeRequested (ref Requisition requisition)
{
if (this.Child != null)
{
requisition = this.Child.SizeRequest ();
}
}
答案 1 :(得分:2)
或者更有可能的是,ShowAll()作为打包所有子项后构建方法的最后一行,除非您不希望默认情况下显示其中一些。
答案 2 :(得分:0)
默认情况下,Gtk +控件(令人沮丧)不可见。
尝试在标签上调用.Show()。