GTK# で TreeView を使用していますが、カスタム セル レンダラーを使用する必要があります。
ほぼすべてが機能するようになりましたが、欠けている部分が 1 つあります。セル レンダラーは、何をレンダリングするかを認識している必要があります。
レンダリングするデータはカスタム クラスです。そのクラスからフィールドを取得したい。
これが私がこれまでに持っているものです
public class TreeItemCellRenderer : CellRenderer
{
public override void GetSize (Widget widget, ref Gdk.Rectangle cell_area, out int x_offset, out int y_offset, out int width, out int height)
{
base.GetSize (widget, ref cell_area, out x_offset, out y_offset, out width, out height);
height = 16;
}
protected override void Render (Gdk.Drawable window,
Widget widget, Gdk.Rectangle background_area, Gdk.Rectangle cell_area, Gdk.Rectangle expose_area, CellRendererState flags)
{
base.Render (window, widget, background_area, cell_area, expose_area, flags);
using (var layout = new Pango.Layout(widget.PangoContext)) {
layout.Alignment = Pango.Alignment.Left;
layout.SetText("Hello, World!");
StateType state = flags.HasFlag(CellRendererState.Selected) ?
widget.IsFocus ? StateType.Selected : StateType.Active : StateType.Normal;
window.DrawLayout(widget.Style.TextGC(state), cell_area.X, cell_area.Y, layout);
}
}
}
ここで、"Hello, World!" の代わりにカスタム フィールドを描画したいと考えています。いくつかのグーグルが示唆したSetProperty
/GetProperty
は私が必要とするものですが、:
var col = new TreeViewColumn("TreeItem", renderer);
col.AddAttribute(renderer, "tree-item", 0);
TreeItemCellRenderer には「tree-item」という名前のプロパティがないため、実行時にエラーがスローされます。また、仮想でSetProperty
はないことに注意してください。
では、どうすればいいですか?