在wpf中我們可以為自己的資料定製顯示方式,也就是說雖然某資料資料是一定的,但我們可以做到讓它的表現方式多種多樣,比如乙個時間,在以前我們一般使用乙個字串(比如「12:03」)來顯示,但我們為什麼就不能顯示乙個小時鐘呢,其實這更合乎情理,利用wpf中的資料模板技術隨意並輕鬆地表現你的資料.
資料模板適用於content control類控制項與items control類控制項.
我們假設有如下乙個類
using
system;
namespace
demo
public
string
name
set}
public
string
photo
set}}}
這個類很簡單地表示了乙個人,他的姓名和他的**(路徑)
如果在我們的軟體中有乙個列表控制項listbox來顯示乙個由多個人組成的列表,在.net 3.0以前我們可能就只能用文本來列出人的姓名而已,或者花不少的精力來重寫列表控制項以便在列表中在顯示人名的同時顯示**.
參考以下**:
<
listbox
x:name
="listbox_peoplelist"
itemtemplate
=""/>
我們定義了乙個listbox,並將其itemtemplate制定為我們自定義的mytemplate,也就是說列表項將按照mytemplate制定的方式來顯示列表內容。
這樣我們就可以發揮我們的想像力來自定義mytemplate
xmlns:demo="clr-namespace:demo"
其中demo是我們的people類所在的名字空間,以後可以使用demo來表示這個名字空間了.
下面的**來定義我們的mytemplate模板,以便告訴我們的列表如何來顯示他的專案:
<
window
.resources
>
<
datatemplate
x:key
="mytemplate"
datatype
="">
<
grid
verticalalignment
="center"
horizontalalignment
="center"
margin
="4,4,4,4"
>
<
grid
.columndefinitions
>
<
columndefinition
width
="auto"
/>
<
columndefinition
width
="auto"
/>
grid.columndefinitions
>
<
image
source
=""width
="50"
height
="50"
grid.column
="0"
grid.rowspan
="1"
/>
<
textblock
text
=""grid.column
="1"
grid.columnspan
="1"
horizontalalignment
="center"
verticalalignment
="center"
/>
grid
>
datatemplate
>
window.resources
>
我們將模板定義為視窗的資源,資源儲存在乙個資源字典中的,
x:key
="mytemplate"
表示其在資源字典中的鍵,datatype
=""表示該資料模板針對的資料型別是demo名字空間下的people類,接下來在gird中我們定義了該資料模板的視覺樹,這也是我們的工作重心,即該視覺樹定義了如何顯示我們的資料。我們使用了乙個image控制項並將其source繫結到people的photo屬性上,這樣以便在該imag控制項上顯示**,然後在image的右邊我們使用乙個textblock控制項來顯示人名(將people的name屬性繫結到textblock的text屬性上)。
注意到這個資料模板實際上在幹什麼:它定義了people型別物件的表現方式,在這裡是顯示people的**並在**的右方顯示姓名。
以後我們需要people物件按這種方式展示給使用者的時候,我們只要將該資料模板指定給要顯示people物件的那個控制項就可以了。
比如 <
listbox
x:name
="listbox_peoplelist"
itemtemplate
=""/>
就告訴我們的列表控制項按照mytemplate定義的方式來顯示其專案。
呵呵,這樣是不是比以前code方式來打造乙個個性列表控制項來得更方便。
這個**塊指定模型的顯示檢視。
繫結及模板更詳細的資料:
model-view-viewmodel模式詳解(wpf就是這種模式,模型和檢視中間加入乙個viewmodel,方便資料繫結,並把按鈕等執行命令封裝為icommand物件)
WPF之DataTemplate資料模板
datatemplate 類 介紹資料物件的可視結構。下面的示例演示如何建立 datatemplate 內聯。datatemplate 指定每個資料項顯示為三個 textblock 內的元素 stackpanel。在此示例中,資料物件是乙個名為類 task。請注意,每個 textblock 這個模板...
WPF 資料繫結 資料模板介紹
實現效果 列出任務項資料,由普通資料模板顯示一般資訊,重要任務項則只顯示大寫文字描述。若任務項的型別為home,由資料模板的邊框改變成黃色,其他任務只大寫顯示文字 根據選定的任務項由資料模板展示其詳細資訊 實踐 datatemplate.triggers資料模板觸發器 itemtemplatesel...
繼續聊WPF 動態資料模板
我為啥稱之為 動態資料模板 先看看下面的截圖,今天,我們就是要實現這種功能。大概是這樣的,我們定義的datatemplate是通過觸發器動態應用到 comboboxitem 上。這個下拉列表控制項繫結了乙個person集合,person類的定義如下 public class person publi...