我正在尝试在 TreeView 中使用旋转按钮。它是这样添加的:
Gtk.TreeViewColumn adjustColumn = new Gtk.TreeViewColumn();
adjustColumn.Title = "";
Gtk.CellRendererSpin adjustCell = new Gtk.CellRendererSpin();
adjustCell.Digits = 0;
adjustCell.Adjustment = new Adjustment(0, 0, 99, 1, 99, 99);
adjustCell.Editable = true;
adjustCell.Visible = true;
adjustCell.Sensitive = true;
adjustCell.Mode = CellRendererMode.Editable;
adjustColumn.PackEnd(adjustCell, true);
adjustColumn.SetCellDataFunc(adjustCell, new Gtk.TreeCellDataFunc(RenderAdjuster));
treeView.AppendColumn(adjustColumn);
在渲染函数内部完成了以下操作:
(cell as Gtk.CellRendererSpin).Width = 30;
(cell as Gtk.CellRendererSpin).Height = 20;
(cell as Gtk.CellRendererSpin).Text = "" + (cell as Gtk.CellRendererSpin).Adjustment.Value;
这确实呈现了值,但旋转按钮不可见!它们仅在用户单击该值后才可见。这绝对是荒谬的,因为除了随机单击单元格之外,用户无法知道该单元格是可编辑的,尤其是因为该行中还有其他不可编辑的值。
所以我的第一个问题是,我怎样才能让这些旋转按钮始终可见?
这可以通过自定义 CellRenderer 完成吗?
我将感谢一个如何创建我自己的、实际工作的、旋转按钮单元格渲染器的示例。不幸的是,自定义单元格渲染器是一个未记录的谜团(就像 gtk# 中的几乎任何东西;))。你能找到的只是画开罗矩形等的例子。必须有一种更简单的方法,您可以简单地将任何小部件放入该渲染器中,并监听点击等,并在渲染单元格时简单地渲染小部件。
一个简单地显示一个按钮(可以监听点击)的自定义 CellRenderer 的示例也可以,因为我至少可以“伪造”一个 SpinButton,通过三个带有文本的列,一个“+”-Button 和一个“ -“-按钮。