树形视图
?
樹形視圖TreeView估計是Gtk#里面最復(fù)雜的控件了,它使用了大名鼎鼎的MVC模式組織數(shù)據(jù)。雖然入門有點(diǎn)麻煩,但是你真正掌握之后,才能發(fā)現(xiàn)這種設(shè)計的靈活和強(qiáng)大。
我這個學(xué)習(xí)系列是根據(jù)Gtk#的官方指南總結(jié)的學(xué)習(xí)心得,當(dāng)然也不僅僅是對官方指南的純粹翻譯。如果想要直接閱讀官方指南的話,可以訪問這里:
http://www.mono-project.com/GtkSharp_TreeView_Tutorial
?
Treeview是根據(jù)MVC模式進(jìn)行組織的,它一共可以分為三個部分。模型(Model)部分存儲要顯示的數(shù)據(jù),視圖(View)部分控制數(shù)據(jù)如何顯示,而控制器(Controller)部分則控制那些數(shù)據(jù)用來顯示,以及如何對數(shù)據(jù)進(jìn)行過濾,排序等等。
Model(模型):
TreeView有兩種最基本的數(shù)據(jù)模型(Model):一種是ListStore,它用來存儲的列表形式組織的數(shù)據(jù);另一種是TreeStore,它用來組織那種有子節(jié)點(diǎn)的(就像一棵樹一樣)的數(shù)據(jù)。
所有的TreeView數(shù)據(jù)模型(Model)都從TreeModel接口實(shí)現(xiàn)。
View(視圖):
視圖由三部分組成:分別是TreeViewColumn,CellRenderer和TreeView窗體(Widget)本身。
其中TreeView窗體負(fù)責(zé)按行(Row)和列(Column)來布局?jǐn)?shù)據(jù),而且提供基本的交互式操作(比如選擇行等等)。?
TreeViewColumn代表一列,一個TreeView視圖可以包含多個列。
而每一列又由至少一個CellRenderer組成,TreeViewColumn本身不負(fù)責(zé)單元(Cell)的渲染,它的渲染由CellRenderer控制。
而CellRenderer是一個抽象類,它有多個實(shí)現(xiàn)。我們可以按照需要實(shí)例我們需要的CellRenderer,如果默認(rèn)的實(shí)現(xiàn)不能滿足我們的需要。也可以實(shí)現(xiàn)一個CellRenderer的子類,定制我們的渲染器。
- CellRendererText 用來顯示文本
- CellRendererPixbuf 用來顯示像素圖
- CellRendererProgress 顯示一個進(jìn)度條
- CellRendererCombo?
- CellRendererToggle
CellRenderer從TreeViewColumn分離出來,使得設(shè)計更加靈活。就像前面所述一個TreeViewColumn可以包含多個CellRenderer,這使得我們可以在一列中同時加入一個圖像和一條文本,有時候這要比把圖像和文本分置在兩個單獨(dú)列要美觀的多。
控制器(Controller):
控制器讓你可以對傳遞給視圖的進(jìn)行修改(過濾或者排列要顯示的數(shù)據(jù))。
下面是一個完整的例子,雖然我們沒有加入任何數(shù)據(jù)。但是它對已經(jīng)演示了TreeView的基本結(jié)構(gòu)。
?1using?System;?2using?Gtk;
?3
?4public?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類,并且設(shè)置它的最小尺寸(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,標(biāo)題為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設(shè)置模型(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鍵入所有代碼后,你就可以進(jìn)行編譯了
mcs?-pkg:gtk-sharp-2.0?TreeViewExample.cs?
運(yùn)行
mono?TreeViewExample.exe?
?
?
?運(yùn)行結(jié)果。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/YunQiDick/p/10027807.html
總結(jié)
- 上一篇: SQLSERVER 和 ORACLE 查
- 下一篇: 图的遍历[摘录自严长生老师的网站]