Mix*_*xim 5 c# gtk# monodevelop
我使用NodeView对象以这种方式向用户输出数据(Gtk#tutorial):
[Gtk.TreeNode (ListOnly=true)]
public class MyTreeNode : Gtk.TreeNode {
string song_title;
public MyTreeNode (string artist, string song_title)
{
Artist = artist;
this.song_title = song_title;
}
[Gtk.TreeNodeValue (Column=0)]
public string Artist;
[Gtk.TreeNodeValue (Column=1)]
public string SongTitle {get { return song_title; } }
}
Gtk.NodeStore store;
Gtk.NodeStore Store
{
get {
if (store == null)
{
store = new Gtk.NodeStore (typeof(MyTreeNode));
store.AddNode (new MyTreeNode ("The Beatles", "Yesterday"));
store.AddNode (new MyTreeNode ("Peter Gabriel", "In Your Eyes"));
store.AddNode (new MyTreeNode ("Rush", "Fly By Night"));
}
return store;
}
}
protected void OnButton1Clicked (object sender, EventArgs e)
{
// Create a column with title Artist and bind its renderer to model column 0
nodeview1.AppendColumn ("Artist", new Gtk.CellRendererText (), "text", 0);
// Create a column with title 'Song Title' and bind its renderer to model column 1
nodeview1.AppendColumn ("Song Title", new Gtk.CellRendererText (), "text", 1);
nodeview1.ShowAll ();
nodeview1.NodeStore=Store;
}
Run Code Online (Sandbox Code Playgroud)
但是我如何为NodeView的某些行着色(例如"The Beatles" - "Yesterday")?我尝试通过更改NodeView样式来实现:Backgrounds,BaseColors,Foregrounds等,但它不起作用.
编辑:我刚才意识到,我可以这样改变列的颜色:
protected void OnButton1Clicked (object sender, EventArgs e)
{
// Create a column with title Artist and bind its renderer to model column 0
nodeview1.AppendColumn ("Artist", new Gtk.CellRendererText (), "text", 0);
// Create a column with title 'Song Title' and bind its renderer to model column 1
nodeview1.AppendColumn ("Song Title", new Gtk.CellRendererText (), "text", 1);
nodeview1.ShowAll ();
nodeview1.NodeStore=Store;
nodeview1.Columns[0].Cells[0].CellBackgroundGdk=new Gdk.Color(0,255,0);
}
Run Code Online (Sandbox Code Playgroud)
但我怎样才能改变特定细胞的颜色?
要更改每行的渲染属性,您有两种可能性
TreeCellDataFunc并将其绑定到单元格渲染器,以确保在渲染之前更改其属性。选项 1 更快,但限制您只能使用静态定义的值;当渲染不仅仅取决于一个变量并且涉及一些逻辑时,2 更好。我将向您展示如何执行 1 并参考Mono 文档了解 2。
如果您想更改前景色,您只需向模型添加一个新列:
[Gtk.TreeNode (ListOnly=true)]
public class MyTreeNode : Gtk.TreeNode
{
public MyTreeNode (string artist, string title, string color)
{
Artist = artist;
Title = title;
Color = color;
}
[Gtk.TreeNodeValue (Column=0)]
public string Artist;
[Gtk.TreeNodeValue (Column=1)]
public string Title;
[Gtk.TreeNodeValue (Column=2)]
public string Color;
}
Run Code Online (Sandbox Code Playgroud)
将有效的 Gdk 颜色表示形式(例如“red”或“#ff0000”)传递给行构造函数:
store.AddNode(new MyTreeNode("The Beatles", "Yesterday", "red"));
store.AddNode(new MyTreeNode("Peter Gabriel", "In Your Eyes", "black"));
Run Code Online (Sandbox Code Playgroud)
然后,当您构建视图时,您只需将该模型列 (2) 绑定到单元格渲染器的“前景”属性:
nodeview1.AppendColumn("Artist", new Gtk.CellRendererText(),
"text", 0, "foreground", 2);
nodeview1.AppendColumn("Song Title", new Gtk.CellRendererText(),
"text", 1, "foreground", 2);
Run Code Online (Sandbox Code Playgroud)
就这样。