当滚动 ScrolledWindow 时需要运行一些代码时,我应该从哪个小部件中捕获哪个事件?
我正在使用的小部件树是:(我的小部件:Gtk.Container)> Viewport > ScrolledWindow
我尝试了许多 ScrollEvent、ScrollChild 等事件处理程序的组合,这些事件处理程序连接到所有这些,但唯一运行任何东西的是来自 Viewport 的事件,当应用程序启动时,SetScrollAdjutstments 被更改为 (x=0,y=0) .
您应该附加到相关滚动条中的GtkAdjustment,并对其“更改”事件做出反应。由于滚动条是范围,因此您可以使用gtk_range_get_adjustment()
调用来执行此操作。
unwind 的回答是正确的。只需发布我的代码以防有人需要完整的解决方案:
// in the xxx : Gtk.Container class:
protected override void OnParentSet(Widget previous_parent) {
Parent.ParentSet += HandleParentParentSet;
}
void HandleParentParentSet(object o, ParentSetArgs args) {
ScrolledWindow swn = (o as Widget).Parent as ScrolledWindow;
swn.Vadjustment.ValueChanged += HandleScrollChanged;
}
void HandleScrollChanged(object sender, EventArgs e) {
// vertical value changed
}
如果您需要更改任何这些小部件的父级,或者可能需要更改类型并更改硬编码类型并处理与前一个父级的断开连接。