《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都是为了让我们看起来更加的舒适而设计,使用好了之后,我们就可以无情的装逼了 . . . 哈哈哈哈 ~~~


作者:浪子花梦

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值