using System; using Gtk; namespace Samples { [Section(ContentType = typeof(CompositeWidget), Category = Category.Widgets)] class CompositeWidgetSection : ListSection { public CompositeWidgetSection() { AddItem("CompositeWidget:", new CompositeWidget()); AddItem("Other instance:", new CompositeWidget()); } } [Template("CompositeWidget.glade", true)] [GLib.TypeName(nameof(CompositeWidget))] class CompositeWidget : Bin { #pragma warning disable CS0649, CS0169 [Child] Button btn1; [Child] Button btn2; [Child("label")] Entry entry; #pragma warning restore CS0649, CS0169 public CompositeWidget() { // Base constructor sets [Child] fields // if [Template(throwOnUnknownChild = true) and GTK can't bind any [Child] field then base constructor throws // GTK writes invalid field/widget name in console (project must be Exe to see console on Windows OS) System.Diagnostics.Debug.Assert(btn1 != null); System.Diagnostics.Debug.Assert(btn2 != null); System.Diagnostics.Debug.Assert(entry != null); } private void on_btn1_clicked(object sender, EventArgs e) { entry.Text = DateTime.Now.ToString(); ApplicationOutput.WriteLine(this, "Instance handler clicked"); } private static void on_btn2_clicked(object sender, EventArgs e) { ApplicationOutput.WriteLine("Static handler clicked"); } } }