设置单元格背景色在TreeView Gtk C#上无法正常工作

问题描述 投票:0回答:1

使用SetCellDataFunc在运行时修改单元格属性。

[要求:修改特定列的单元格背景颜色

想要修改“ Item Quantit y”列的单元格颜色

它修改所有列的单元格颜色。

此意外行为,因为仅启用了一列。

您能帮我这个忙吗?>

Application output

请找到代码段

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在运行时修改单元格属性。要求:修改特定列的单元格背景色要修改“项目数量”列的单元格颜色它会修改...

c# linux gtk# gtk2
1个回答
0
投票

需要为每个列使用不同的CellRendererText绑定。

© www.soinside.com 2019 - 2024. All rights reserved.