Перехват события прокрутки в gtk # - PullRequest
0 голосов
/ 17 апреля 2009

Какое событие из какого виджета мне нужно перехватить, когда мне нужно запустить какой-то код при прокрутке ScrolledWindow?

Это дерево виджетов, которое я использую: (мой виджет: Gtk.Container)> Окно просмотра> ScrolledWindow

Я перепробовал множество комбинаций обработчиков событий ScrollEvent, ScrollChild и т. Д., Связанных со всеми из них, но единственное, что запускает что-либо, - это событие из Viewport, в котором SetScrollAdjutstments изменяется на (x = 0, y = 0) при приложение запускается.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2009

Вы должны присоединиться к GtkAdjustment , находящемуся на соответствующей полосе прокрутки, и реагировать на его событие " Изменено ". Поскольку полосы прокрутки являются диапазонами, для этого используется вызов <a href="http://library.gnome.org/devel/gtk/unstable/GtkRange.html#gtk-range-get-adjustment" rel="nofollow noreferrer">gtk_range_get_adjustment()</a>.

0 голосов
/ 17 апреля 2009

ответ открутился правильно. Просто разместите мой код на случай, если кому-то понадобится полное решение:

// 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
}

Если вам нужно изменить родительский элемент любого из этих виджетов или вам может понадобиться изменить типы и изменить жестко закодированные типы и обработать отключение от предыдущего родительского элемента.

...