《15天玩轉WPF》—— Data / Control 模板的使用(一)

數據模板就是將數據顯示的樣子進行一個改變
同理,控件模板也是將控件的樣子進行改變,下面我們來探索一下這些知識 . . .


DataTemplate

DataTemplate 常用的地方有 3 處,分別是:

ContentControl 的 ContentTemplate屬性 ContentControl 的內容穿衣服
ItemsControl 的 ItemTemplate屬性 ItemsControl 的數據條目穿衣服
GridViewColumn 的 CellTemplate屬性 給GridViewColumn 單元格里的數據穿衣服

此文章將使用其中的 ItemTemplate進行測試 . . .

我們需要做的事情是將一組數據以柱狀圖的形式顯示出來,這組數據有:
年份、某年談了多少個女朋友

效果樣式類似於這種:

在這裏插入圖片描述

好了,接下來讓我們開始吧:

上面的這張圖上面有兩個數據,分別是 年份個數
它的整體樣式是我們需要引用我們的主題 —— DataTemplate 來實現
其中我們也使用的 Binding來連接 ListBox中的 Item

  1. 創建DataTemplate :
<Window.Resources>
        <DataTemplate x:Key="girlNum">
            <Grid>
		<StackPanel Orientation="Horizontal">
                    <Grid>
                        <Rectangle Stroke="Yellow" Fill="Orange" Width="{Binding Num}"/>
                        <TextBlock Text="{Binding Year}"/>            
            	    </Grid>
                    <TextBlock Text="{Binding Num}" Margin="5,0"/>
                </StackPanel>
            </Grid>	
        </DataTemplate>
</Window.Resources>

其中發現我們需要的佈局 —— 一個矩形,兩個 TextBlock . . . 之所以把這個 DataTemplate放在 資源中是爲方便使用,增加程序的可讀性.
並且,我們使用Binding來完成 數據驅動UI的理念

  1. 使用 ListBox接收數據,並引用 DataTemplate:
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
        <ListBox x:Name="listBoxKind" ItemTemplate="{StaticResource girlNum}"/>
</Grid>

我們發現引用DataTemplate的時候,引用了一個屬性叫 ItemTemplate,開頭的時候講過 . . .

  1. 定義一個類,用包含一些屬性:

數量、年份

class GirlAndNum
{
        public int Num { get; set; }
	public string Year { get; set; }
}
  1. 定義一些數據,並且將這些數據賦值給 ListBox的 ItemsSource屬性:
List<GirlAndNum> list = new List<GirlAndNum>()
{
	new GirlAndNum(){Num = 100, Year = "2016年"},
	new GirlAndNum(){Num = 120, Year = "2017年"},
	new GirlAndNum(){Num = 140, Year = "2018年"},
	new GirlAndNum(){Num = 160, Year = "2019年"},
	new GirlAndNum(){Num = 200, Year = "2020年"},
};

this.listBoxKind.ItemsSource = list;	// itemsContorl 的屬性
  1. 效果圖如下:
    在這裏插入圖片描述

  2. 總結:

我們可以看出來,DataTemplate其實並不是太難,爲數據穿上衣服而已,合理的使用 DataTemplate 會使程序變的更加漂亮 . . .


ControlTemplate

我們可以通過改變 Control的外觀來進行更加人性化的界面,比如下面:

在這裏插入圖片描述
如果我們覺得這個 TextBox的樣子是圓角矩形比較好看,那我們怎麼來實現呢?TextBox的屬性也沒有用來設計圓角矩形的 . . .

這個時候我們的 ControlTemplate就派上用處了,下面我們就來實現一下吧
我們需要的工具是 VS Blend,這個工具類似於 PS,帶有XAML的設計工具

下面讓我們來實現一下吧

  1. 打開 Blend,並設計我們需要的未改變之前的樣子:

在這裏插入圖片描述

  1. 右擊控件,點出下面的編輯模塊副本:
    在這裏插入圖片描述
    爲什麼不是創建空白的呢? 因爲爲我們是在原有的樣子上進行的修改 . . .

  2. 自定義名稱,用於引用:

在這裏插入圖片描述

  1. 觀察已經解剖開的 TextBox控件:

在這裏插入圖片描述
我們發現,這個模塊是由兩個部分組成的:

  • border
  • border 嵌套的 PART_ContentHost

border 的類型爲 Border, PART_ContentHost 的類型爲 ScrollViewer.

  1. 添加圓角矩形的特性:

在這裏插入圖片描述

  1. 引用剛剛定義的 Style:
    在這裏插入圖片描述

爲什麼這裏是 Style,而不是Resources呢,因爲模板的本質就是改變一些風格而已 . . .

  1. 效果界面:

在這裏插入圖片描述

現在這個圓角的樣子是不是更加可愛了呢 ?

我們怎麼樣才能把這個設計好的界面使用到 VS2017上面呢? 其實我需要把這個XAML 文件加入項目之中就可以了

  1. 加入到VS2017中:

找到包含 App.xaml 文件並且把它放到項目之中,可以替換項目本身的 App.xaml(最好不要,這種爲了方便就算了). . .

在這裏插入圖片描述

  1. 引用模塊,效果如圖:

在這裏插入圖片描述

  1. 總結:

DataTemplate 與 ControlTemplate都是爲了讓我們看起來更加的舒適而設計,使用好了之後,我們就可以無情的裝逼了 . . . 哈哈哈哈 ~~~


作者:浪子花夢

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章