gtk# Vbox 没有出现

gtk# Vbox not showing up

我正在尝试在我的 gtk# 应用程序中设置 2 个 VBox。问题是,他们根本没有出现。我看不到按钮。我做错了什么?

using System;
using Gtk;
using Kassa;

public partial class MainWindow : Gtk.Window
{
    VBox left, right;
    public MainWindow() : base(Gtk.WindowType.Toplevel)
    {
        Build();
        this.Title = "Kassa";
        this.SetSizeRequest(1920, 1080);
        //this.Fullscreen();

        left = new VBox();

        left.HeightRequest = this.HeightRequest;

        right = new VBox(true, 0);

        right.HeightRequest = this.HeightRequest;
        right.WidthRequest = 64 * 4;

        Button button = new Button("b");
        right.Add(button);
        right.PackStart(button, true, false, 0);

        button.Show();

        this.Add(left);
        this.Add(right);

        right.Show();

        this.ShowAll();
    }

    protected void OnDeleteEvent(object sender, DeleteEventArgs a)
    {
        Application.Quit();
        a.RetVal = true;
    }
}

我已经尝试了我能想到的所有可能的 Add 和 ShowAll 组合。

您应该只使用 Window.Add() 一次,添加包含的小部件(VBox 或类似的),然后使用 Box.PackStart()Box.PackEnd() 该容器中的方法以创建复杂的布局。

    Build();
    this.Title = "Kassa";

    VBox container = new VBox();
    left = new VBox();
    right = new VBox(true, 0);

    Button button = new Button( "b" );
    right.Add(button);
    right.PackStart( button, true, false, 0 );

    container.PackStart( left, true, true, 5 );
    container.PackStart( right, true, true, 5 );

    this.Add( container );
    this.ShowAll();

如果您以相反的顺序添加框,您会看到一个巨大的按钮占据了整个屏幕。解释是 Window.Add() 只是加了一项,如果你调用两次,那么前者忘记了,而后者使用...正是那个什么都没有的(前者有一个按钮),造成错觉没有显示任何内容。

希望对您有所帮助。