[Mono学习]树形视图TreeView学习笔记(一):第一个例子

本文详细介绍了Gtk#中的TreeView控件,包括其MVC架构、模型(Model)、视图(View)及控制器(Controller)等核心概念,并通过一个简单的示例展示了TreeView的基本用法。

树形视图TreeView估计是Gtk#里面最复杂的控件了,它使用了大名鼎鼎的MVC模式组织数据。虽然入门有点麻烦,但是你真正掌握之后,才能发现这种设计的灵活和强大。

我这个学习系列是根据Gtk#的官方指南总结的学习心得,当然也不仅仅是对官方指南的纯粹翻译。如果想要直接阅读官方指南的话,可以访问这里:

http://www.mono-project.com/GtkSharp_TreeView_Tutorial

Treeview是根据MVC模式进行组织的,它一共可以分为三个部分。模型(Model)部分存储要显示的数据,视图(View)部分控制数据如何显示,而控制器(Controller)部分则控制那些数据用来显示,以及如何对数据进行过滤,排序等等。

Model(模型):

TreeView有两种最基本的数据模型(Model):一种是ListStore,它用来存储的列表形式组织的数据;另一种是TreeStore,它用来组织那种有子节点的(就像一棵树一样)的数据。

所有的TreeView数据模型(Model)都从TreeModel接口实现。

View(视图):

视图由三部分组成:分别是TreeViewColumn,CellRenderer和TreeView窗体(Widget)本身。

其中TreeView窗体负责按行(Row)和列(Column)来布局数据,而且提供基本的交互式操作(比如选择行等等)。

TreeViewColumn代表一列,一个TreeView视图可以包含多个列。

而每一列又由至少一个CellRenderer组成,TreeViewColumn本身不负责单元(Cell)的渲染,它的渲染由CellRenderer控制。

而CellRenderer是一个抽象类,它有多个实现。我们可以按照需要实例我们需要的CellRenderer,如果默认的实现不能满足我们的需要。也可以实现一个CellRenderer的子类,定制我们的渲染器。

  • CellRendererText 用来显示文本
  • CellRendererPixbuf 用来显示像素图
  • CellRendererProgress 显示一个进度条
  • CellRendererCombo
  • CellRendererToggle

CellRenderer从TreeViewColumn分离出来,使得设计更加灵活。就像前面所述一个TreeViewColumn可以包含多个CellRenderer,这使得我们可以在一列中同时加入一个图像和一条文本,有时候这要比把图像和文本分置在两个单独列要美观的多。

控制器(Controller):

控制器让你可以对传递给视图的进行修改(过滤或者排列要显示的数据)。

下面是一个完整的例子,虽然我们没有加入任何数据。但是它对已经演示了TreeView的基本结构。

 1 using System ;
 2 using Gtk ;
 3
 4 public class TreeViewExample
 5 {
 6     public static void Main ( string[] argv )
 7     {
 8         Application . Init ();
 9         new TreeViewExample ();
10         Application . Run ();
11     }
12
13     public TreeViewExample ()
14     {
15          // 新建一个Window类,并且设置它的最小尺寸( 500 , 200
16         Window window  =  new Window ( " TreeView Example " );
17         window . SetSizeRequest ( 500 , 200 );
18         window . DeleteEvent  +=  Delete ;     // 添加Delete事件处理
19
20         TreeView  tree   =  new TreeView ();   // 新建TreeView对象
21          // 新建一个TreeViewColumn,标题为Artist
22         TreeViewColumn artistCol  =  new TreeViewColumn ();
23         artistCol . Title  =   " Artist " ;
24
25         TreeViewColumn songCol =  new TreeViewColumn ();
26         songCol . Title  =   " Song " ;
27          // 把两个Column加入到TreeView视图中
28          tree . AppendColumn ( artistCol );
29          tree . AppendColumn ( songCol );
30         
31          // 新建一个ListStore Model,它里面每行(Row)存储两个string对象(Column)
32         ListStore musicList  =  new ListStore ( typeof ( string ), typeof ( string ));
33          // 给视图TreeView设置模型(Model)
34          tree . Model  =  musicList ;
35         window . Add ( tree );   // 把视图加入到窗体中
36         window . ShowAll ();     // 显示窗体
37     }
38
39     private void Delete ( object o , DeleteEventArgs args )
40     {
41         Application . Quit ();
42     }
43 }

 

使用vim键入所有代码后,你就可以进行编译了

mcs -pkg :gtk -sharp- 2.0  TreeViewExample . cs

 

运行

mono TreeViewExample . exe

 

 运行结果。

 

转载于:https://www.cnblogs.com/shpherd/archive/2008/10/22/1316744.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值