使用SetCellDataFunc在运行时修改单元格属性。
[要求:修改特定列的单元格背景颜色
想要修改“ Item Quantit y”列的单元格颜色
它修改所有列的单元格颜色。
此意外行为,因为仅启用了一列。
您能帮我这个忙吗?>
请找到代码段
using System;
using Gtk;
public partial class MainWindow : Gtk.Window
{
private Gtk.TreeView treeView;
private Gtk.ListStore listStore;
private Gtk.VBox ItemViewPad;
private Gtk.ScrolledWindow scrolledWindow;
public MainWindow() : base(Gtk.WindowType.Toplevel)
{
Build();
ItemViewPad = new VBox();
scrolledWindow = new ScrolledWindow();
treeView = new TreeView();
listStore = new ListStore(typeof(string), typeof(string), typeof(string));
CellRendererText cellRendererText = new CellRendererText();
TreeViewColumn treeViewColumnName = new TreeViewColumn();
treeViewColumnName.Expand = true;
treeViewColumnName.Title = "Item Name";
treeViewColumnName.PackStart(cellRendererText, false);
treeViewColumnName.AddAttribute(cellRendererText, "text", 0);
TreeViewColumn treeViewColumnType = new TreeViewColumn();
treeViewColumnType.Expand = true;
treeViewColumnType.Title = "Item Type";
treeViewColumnType.PackStart(cellRendererText, false);
treeViewColumnType.AddAttribute(cellRendererText, "text", 1);
TreeViewColumn treeViewColumnQuantity = new TreeViewColumn();
treeViewColumnQuantity.Expand = true;
treeViewColumnQuantity.Title = "Item Quantity";
treeViewColumnQuantity.PackStart(cellRendererText, false);
treeViewColumnQuantity.AddAttribute(cellRendererText, "text", 2);
treeViewColumnQuantity.SetCellDataFunc(cellRendererText, new TreeCellDataFunc(OnChangedQuantity));
treeView.AppendColumn(treeViewColumnName);
treeView.AppendColumn(treeViewColumnType);
treeView.AppendColumn(treeViewColumnQuantity);
treeView.Model = listStore;
scrolledWindow.Add(treeView);
ItemViewPad.PackStart(scrolledWindow, true, true, 6);
Add(ItemViewPad);
if ((this.Child != null))
this.Child.ShowAll();
ShowAll();
listStore.AppendValues(new object[] { "Pen", "10", "10" });
listStore.AppendValues(new object[] { "Pencil", "20", "20" });
listStore.AppendValues(new object[] { "ColorPen", "30", "30" });
}
private void OnChangedQuantity(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
string quantity = (string)tree_model.GetValue(iter, 2);
if(string.IsNullOrEmpty(quantity))
{
return;
}
Console.WriteLine(tree_column.Title);
Gdk.Color color = cell.CellBackgroundGdk;
if(string.Compare(quantity, "30") == 0)
{
color = new Gdk.Color(255, 0, 0);
}
else if (string.Compare(quantity, "20") == 0)
{
color = new Gdk.Color(0, 255, 0);
}
else if (string.Compare(quantity, "10") == 0)
{
color = new Gdk.Color(0, 0, 255);
}
cell.CellBackgroundGdk = color;
}
private void OnChangedType(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
string type = (string)tree_model.GetValue(iter, 1);
if (string.IsNullOrEmpty(type))
{
return;
}
Gdk.Color color = cell.CellBackgroundGdk;
if (string.Compare(type, "30") == 0)
{
color = new Gdk.Color(0, 0, 255);
}
else if (string.Compare(type, "20") == 0)
{
color = new Gdk.Color(0, 255, 0);
}
else if (string.Compare(type, "10") == 0)
{
color = new Gdk.Color(255, 0, 0);
}
cell.CellBackgroundGdk = color;
}
private void OnChangedName(TreeViewColumn tree_column, CellRenderer cell, TreeModel tree_model, TreeIter iter)
{
string name = (string)tree_model.GetValue(iter, 0);
if (string.IsNullOrEmpty(name))
{
return;
}
}
protected void OnDeleteEvent(object sender, DeleteEventArgs a)
{
Application.Quit();
a.RetVal = true;
}
}
public static void Main(string[] args)
{
Application.Init();
MainWindow win = new MainWindow();
win.Show();
Application.Run();
}
使用SetCellDataFunc在运行时修改单元格属性。要求:修改特定列的单元格背景色要修改“项目数量”列的单元格颜色它会修改...
需要为每个列使用不同的CellRendererText绑定。