Mono GTK# - 窗口或小部件的PropertyNotifyEvent

时间:2013-04-03 10:01:38

标签: events event-handling mono gtk#

如果给定窗口或窗口小部件的属性已更改并找到Gtk.Widget.PropertyNotifyEvent事件,我希望能够做出反应。 (单声道)文档说如果任何属性被更改,它将被触发。所以我试图使用它,但我的事件处理程序方法永远不会被调用:

protected void DoSomething()
{
    Gtk.Window __Window = new Gtk.Window(Gtk.WindowType.Toplevel);
    Gtk.Button __Button = new Gtk.Button();
    __Window.Add(__Button);
    __Button.PropertyNotifyEvent += this.ButtonPropertyChangedEventHandler;

    ... // Show the window

    __Button.Label = Mono.Unix.Catalog.GetString("This is a test button");
}

protected void ButtonPropertyChangedEventHandler(object o, PropertyNotifyEventArgs e)
{
    // Handle the event
}

我错过了什么吗?或者我是否理解了一些非常基本的错误?或者还有另一种方法来实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

需要通过设置GDK_PROPERTY_CHANGE_MASK标志明确启用属性更改通知,如下所述:

https://developer.gnome.org/gtk3/stable/GtkWidget.html#GtkWidget-property-notify-event

在Gtk#中,您只需在代码中添加以下行:

__ Button.Events | = Gdk.EventMask.PropertyChangeMask;

分配给PropertyNotifyEvent事件的处理程序将开始接收属性更改通知。 Gtk#隐式启用某些事件,但应该从用户代码或stetic设计器启用所有其他事件。