5 votes

Comment créez-vous un widget GTK# personnalisé avec ses propres contrôles?

Je suis en train de créer un widget GTK personnalisé en sous-classant Gtk.Bin. Je n'utilise pas le générateur d'interface graphique Stetic. Ce widget contiendra plusieurs widgets Gtk standard (VBoxs, Labels, Buttons, etc).

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);
    }
}

Pendant ce temps, lorsque j'ajoute mon widget personnalisé à la fenêtre principale, je ne vois rien. Les autres contrôles de la fenêtre s'affichent, de l'espace est alloué pour ce widget personnalisé. Je m'attends à voir le libellé "MyWidget" dans son espace, mais rien ne s'affiche. Je passe en revue le code dans le débogueur et tout est appelé, mais rien ne s'affiche à l'exécution.

Toute aide serait appréciée.

6voto

Ronaldo Nascimento Points 554

Besoin de remplacer :

    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 ();
        }
    }

2voto

mkestner Points 246

Ou probablement plus probable encore, ShowAll() en tant que dernière ligne dans la méthode de construction après que tous les enfants soient emballés, à moins que vous ne vouliez que certains d'entre eux ne soient visibles par défaut.

0voto

jpobst Points 8928

Les contrôles Gtk+ ne sont (frustramment) pas visibles par défaut.

Essayez d'appeler .Show() sur votre Label.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X