如何使用自己的控件创建自定义GTK#Widget?

时间:2011-03-04 16:49:19

标签: c# mono gtk#

我正在尝试通过继承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”,但没有任何显示。 我通过调试器中的代码逐步调用它,但它在运行时都被调用了。

任何帮助都将不胜感激。

3 个答案:

答案 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()。