2012-04-07 8 views
0

Как я могу получить высоту treeview/treeviewcolumn, пожалуйста? У меня есть простой код с макетом (внутри - большое дерево) и вертикальная полоса прокрутки в таблице. Когда я устанавливаю малую высоту макета, я не вижу всех элементов treeview, и когда я устанавливаю его большим, я вижу целую таблицу с пустым пространством в нижней части макета. Можно ли установить макет, чтобы он имел ровно такую ​​же высоту, как treeview, или самый большой из treeviewcolumns? Спасибо заранее. Кусок кода:Как получить высоту treeview/treeviewcolumn?

tree = new Gtk.TreeView(); 
vadjustment = new Gtk.Adjustment(0, 0, 0, 0, 0, 0); 
vscrollbar = new Gtk.VScrollbar(vadjustment); 
Lyout layout = new Layout(null, vadjustment); 
layout.Put(tree, 0, 0); 
Table table = new Table(1, 2, false); 
table.Attach(layout, 0, 1, 0, 1, Gtk.AttachOptions.Expand|Gtk.AttachOptions.Fill, Gtk.AttachOptions.Expand|Gtk.AttachOptions.Fill, 0, 0); 
table.Attach(vscrollbar, 1, 2, 0, 1, Gtk.AttachOptions.Shrink, Gtk.AttachOptions.Shrink|Gtk.AttachOptions.Fill, 0, 0); 
box.PackStart (table, true, true, 4); 
vbox1.Add(box); 
... 
TreeViewColumn first = new TreeViewColumn(); 
first.Title=h1; 
Gtk.CellRendererText first_name_cell = new Gtk.CellRendererText(); 
first.PackStart(prvy_name_cell, true); 
first_name_cell.Width=20; 
... 
tree.AppendColumn (first); 
layout.SetSize(800, ???); 

И один другой вопрос - можно ли применять черный цвет рамки для элементов TreeView?

ответ

0

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

+0

Привет, благодарю вас за ответ. Я понял, что вы понимаете, что у вас есть, но у меня есть небольшая проблема, чтобы получить размер дерева от функции. Я создал событие - tree.ExposeEvent + = HandleTreeExposeEvent; void HandleTreeExposeEvent (объект o, ExposeEventArgs args) \t { \t \t layout.SetSize (800, 'КАК ПОЛУЧИТЬ ЭТОТ НОМЕР'); \t} ' – matej148

+0

Есть ли у древовидной структуры некоторую функцию, чтобы получить ее высоту? Заранее спасибо. – matej148

+0

«Распределение» виджетов содержит его высоту. Я не знаю gtk #, но gtk имеет метод gtk_widget_get_allocation(). – ergosys