我在Xamarin-Studio中使用自定义Widget时遇到问题,我使用Mono,C#和Gtk#。 它应该显示2个图像和2个标签,应该像按钮一样工作,应该是可隐藏的。 这是我的代码:
using System;
using GLib;
using Gtk;
using System.Runtime.InteropServices;
namespace myProgram_V1
{
[System.ComponentModel.ToolboxItem (true)]
public partial class myWidget : Gtk.Bin
{
public myWidget ()
{
this.Build ();
HeightRequest = 128;
}
public void setHeight (int height)
{
HeightRequest = height;
}
public void setLabel1 (String text)
{
label1.Text = text;
}
public void setLabel2 (String text)
{
label2.Text = text;
}
public void setImage1 (String image)
{
image1.Pixbuf = new Gdk.Pixbuf (image);
}
public void setImage2 (String image)
{
image2.Pixbuf = new Gdk.Pixbuf (image);
}
[Signal ("clicked")]
public event EventHandler Clicked {
add {
Signal signal = Signal.Lookup (this, "clicked");
signal.AddDelegate (value);
}
remove {
Signal signal = Signal.Lookup (this, "clicked");
signal.RemoveDelegate (value);
}
}
}
}
如果我在这样的其他小部件/窗口的GUI-Designer中使用这个小部件,它可以被Designer识别,我可以在属性中设置Clickevent,但如果我运行程序,我会得到
(myProgram_V1:914): GLib-GObject-WARNING **: gsignal.c:2375: signal `clicked' is invalid for instance `0x7a9c9980' of type `__gtksharp_2_myProgram+5fV1_myWidget'
并且无法点击。
但是如果我让它继承Gtk.Button而不是Gtk.Bin这个小部件不能用于Designer,但它可以在运行时使用,如果我事先设置click事件,有时候,在构建或编译期间, GUI-Designer将自动生成的文件中的所有global :: myProgram_V1.myWidget条目替换为void,不再有任何工作。
此外,.Hide()将无法使用此小部件,“隐藏”此小部件的唯一选项是使用.Destroy()。
提前感谢您的帮助。