2011-03-04 170 views
2

我想通過繼承Gtk.Bin來創建一個自定義的GTK Widget。我沒有使用Stetic GUI生成器。這個小部件將包含幾個標準的Gtk小部件(VBoxs,標籤,按鈕等)。如何用自己的控件創建自定義的GTK#Widget?

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」,但沒有任何顯示。 我一步一步地通過調試器中的代碼,它都被調用,但它在運行時不顯示。

任何幫助,將不勝感激。

回答

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

對不起,沒注意到你繼承斌,並不箱。大多數時候我做這些類的子類,我從VBox或HBox開始,而不是將一個添加到Bin子類。那麼你不需要通過箱子包裝代碼來完成尺寸協商的工作。 – mkestner 2011-03-22 22:33:20

0

默認情況下,Gtk +控件(令人沮喪地)不可見。

嘗試在標籤上調用.Show()。

+0

我明確告訴標籤顯示,仍然沒有工作 – 2011-03-08 15:17:51

2

或者更可能的是,ShowAll()作爲所有子項打包後的構建方法的最後一行,除非您不希望某些子項在默認情況下可見。

+0

沒有workie,仍然是現在表明 – 2011-03-08 15:07:12

相關問題