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

Ron*_*nto 5 c# mono gtk#

我正在尝试通过继承 Gtk.Bin 来创建自定义 GTK 小部件。我没有使用 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

同时,当我将自定义小部件添加到主窗口时,我什么也没看到。显示其他控件的窗口,为此自定义小部件分配了空间。我希望在其空间中看到“MyWidget”标签,但什么也没有显示。我单步调试调试器中的代码,所有代码都被调用,但在运行时没有显示。

任何帮助,将不胜感激。

Ron*_*nto 6

需要覆盖:

    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 ();
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 抱歉,没有注意到您在继承 Bin,而不是 Box。大多数时候我做这些类型的子类,我从 VBox 或 HBox 开始,而不是向 Bin 子类添加一个。然后你不需要做尺寸协商的事情,因为它是由 Box 包装代码为你完成的。 (2认同)