Also ich erstelle einen Baumansichtselektor mit C#/GTKSharp. Ich habe die grundlegende Funktionalität für die Baumansichtsauswahl: Die Daten werden in mein Modell geladen, und ich kann auf einen Knoten klicken, um ihn zu reduzieren/erweitern.Wie bekomme ich das GTKsharp TreeView-Widget zur Anzeige von Expandern?
Der Teil, den ich nicht ausarbeiten kann, ist, wie man den CellRenderer anweist, die Ein/Ausblenden-Schaltfläche anzuzeigen. In den Beispielen wird ein Dreieck angezeigt, das nach rechts oder unten zeigt, je nachdem, ob der Knoten geöffnet oder ausgeblendet ist. Ich habe nur einen leeren Bereich, der wie erwartet funktioniert, während ich klicke, aber nichts zeigt.
Eine Möglichkeit ist, dass ich ein weiß auf weiß Text Problem habe, aber ich bezweifle es, da meine Etiketten gut angezeigt werden und ich noch keine Formatierung getan habe.
Ich habe versucht, Code für ShowExpanders hinzuzufügen, aber das war schon wahr.
TreeView = new Gtk.TreeView();
// We add the event handlers (i.e. the control part) to the tree
TreeView.RowActivated += SelectorActivated; //On double click
TreeView.Selection.Changed += SelectorSelected; // On select (single click)
// Raise a context menu here??
// Connect to the ButtonPressEvent
// Raise a popup button
// Create columns [View]
Gtk.TreeViewColumn TreeViewColumTitle = new Gtk.TreeViewColumn();
TreeViewColumTitle.Title = "Profile";
Gtk.CellRendererText NameCellTitle = new Gtk.CellRendererText();
TreeViewColumTitle.PackStart(NameCellTitle, true);
TreeViewColumTitle.SetCellDataFunc(NameCellTitle, new Gtk.TreeCellDataFunc(RenderTitle));
NameCellTitle.Mode = CellRendererMode.Activatable;
// Populate the model
// Note that we could dispense with this step if we generated an ITreeModel
// interface in the Object class.
BindModel(Model);
// Attach everything to the pane
TreeView.Model = GTKModel;
TreeView.AppendColumn(TreeViewColumTitle);
TreeView.ShowExpanders = true;
TreeView.ExpanderColumn.Visible = true;
...
private void BindModel(Model Model) {
GTKModel = new Gtk.TreeStore(typeof(Object));
foreach (Object Object in Model.Selector) {
var BindingData = new BindingDataGTK(this, Object);
BindingData.Iter = GTKModel.AppendValues(Object);
Object.BindingData = BindingData;
BindChildren(GTKModel, BindingData);
}
}
private void BindChildren(TreeStore TreeStore, BindingDataGTK ObjectBinding) {
foreach (var Child in ObjectBinding.Object) {
var BindingData = new BindingDataGTK(this, Child);
BindingData.Iter = TreeStore.AppendValues(ObjectBinding.Iter, Child);
Child.BindingData = BindingData;
BindChildren(TreeStore, BindingData);
}
}
private void RenderTitle(Gtk.TreeViewColumn Column, Gtk.CellRenderer Cell,
Gtk.ITreeModel GTKModel, Gtk.TreeIter Iter) {
Object Object = (Object)GTKModel.GetValue(Iter, 0);
(Cell as Gtk.CellRendererText).Text = Object.Title;
Console.WriteLine("Render {0}", Object.Title);
}