树形视图
Posted yunqidick
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树形视图相关的知识,希望对你有一定的参考价值。
树形视图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的基本结构。
![技术分享图片](/img/None.gif)
2
![技术分享图片](/img/None.gif)
3
![技术分享图片](/img/None.gif)
4
![技术分享图片](/img/None.gif)
5
![技术分享图片](/img/None.gif)
6
![技术分享图片](/img/None.gif)
7
![技术分享图片](/img/None.gif)
8
![技术分享图片](/img/None.gif)
9
![技术分享图片](/img/None.gif)
10
![技术分享图片](/img/None.gif)
11
![技术分享图片](/img/None.gif)
12
![技术分享图片](/img/None.gif)
13
![技术分享图片](/img/None.gif)
14
![技术分享图片](/img/None.gif)
15
![技术分享图片](/img/None.gif)
16
![技术分享图片](/img/None.gif)
17
![技术分享图片](/img/None.gif)
18
![技术分享图片](/img/None.gif)
19
![技术分享图片](/img/None.gif)
20
![技术分享图片](/img/None.gif)
21
![技术分享图片](/img/None.gif)
22
![技术分享图片](/img/None.gif)
23
![技术分享图片](/img/None.gif)
24
![技术分享图片](/img/None.gif)
25
![技术分享图片](/img/None.gif)
26
![技术分享图片](/img/None.gif)
27
![技术分享图片](/img/None.gif)
28
![技术分享图片](/img/None.gif)
29
![技术分享图片](/img/None.gif)
30
![技术分享图片](/img/None.gif)
31
![技术分享图片](/img/None.gif)
32
![技术分享图片](/img/None.gif)
33
![技术分享图片](/img/None.gif)
34
![技术分享图片](/img/None.gif)
35
![技术分享图片](/img/None.gif)
36
![技术分享图片](/img/None.gif)
37
![技术分享图片](/img/None.gif)
38
![技术分享图片](/img/None.gif)
39
![技术分享图片](/img/None.gif)
40
![技术分享图片](/img/None.gif)
41
![技术分享图片](/img/None.gif)
42
![技术分享图片](/img/None.gif)
43
![技术分享图片](/img/None.gif)
使用vim键入所有代码后,你就可以进行编译了
运行
运行结果。
以上是关于树形视图的主要内容,如果未能解决你的问题,请参考以下文章