Как создать собственный виджет GTK # с собственными элементами управления? - PullRequest
3 голосов
/ 04 марта 2011

Я пытаюсь создать собственный виджет GTK, создав подкласс Gtk.Bin.Я не использую Stetic GUI Builder.Этот виджет будет содержать несколько стандартных виджетов Gtk (VBoxs, Labels, Buttons и т. Д.).

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 ]

4 голосов
/ 08 марта 2011

необходимо переопределить:

    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 ();
        }
    }
2 голосов
/ 06 марта 2011

Или, более вероятно, ShowAll () как последняя строка в методе сборки после того, как все дочерние элементы упакованы, если только вы не хотите, чтобы некоторые из них были видны по умолчанию.

0 голосов
/ 04 марта 2011

Gtk + элементы управления (досадно) не видны по умолчанию.

Попробуйте позвонить .Show () на ярлыке.

...