WPF入门8:什么是模板(Template)

什么是模板(Template)?

模板应用在View层,它的主要作用是修改控件的样式、交互、数据展示。
模板主要分为:DataTemplate 和 ControlTemplate。

  • ControlTemplate它决定了控件“长成什么样子”,并让开发者有机会在控件原有的内部逻辑基础上扩展自己的逻辑。
  • DataTemplate是数据内容的展示方式,一条数据显示成什么样子,是简单的文本还是直观的图形就由它来决定了。
  <Window.Resources><DataTemplate x:Key="songSheetDataTemplate"><StackPanel Orientation="Horizontal"><ImageWidth="30"Height="30"Source="{Binding Path=Icon}" /><TextBlockHorizontalAlignment="Center"VerticalAlignment="Center"FontSize="14"FontWeight="Bold"Text="{Binding Path=Name}" /></StackPanel></DataTemplate><ControlTemplate x:Key="ButtonTemplate" TargetType="Button"><!--  定义视觉树  --><Grid><EllipseName="faceEllipse"Width="{TemplateBinding Button.Width}"Height="{TemplateBinding Control.Height}"Fill="{TemplateBinding Button.Background}" /><TextBlockName="txtBlock"Margin="{TemplateBinding Button.Padding}"HorizontalAlignment="Center"VerticalAlignment="Center"Text="{TemplateBinding Button.Content}" /></Grid><!--  定义视觉树_end  --><!--  定义触发器  --><ControlTemplate.Triggers><Trigger Property="Button.IsMouseOver" Value="True"><Setter Property="Button.Foreground" Value="Red" /></Trigger></ControlTemplate.Triggers><!--  定义触发器_End  --></ControlTemplate></Window.Resources>
 <Grid><Grid.RowDefinitions><RowDefinition Height="2*" /><RowDefinition Height="6*" /><RowDefinition Height="2*" /></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="2*" /><ColumnDefinition Width="8*" /></Grid.ColumnDefinitions><ListBoxx:Name="LstSongSheets"Grid.Row="1"ItemTemplate="{StaticResource songSheetDataTemplate}"ItemsSource="{Binding Path=SongSheets}" /><DataGridGrid.Row="1"Grid.Column="1"AutoGenerateColumns="False"ItemsSource="{Binding ElementName=LstSongSheets, Path=SelectedItem.Songs}"RowHeaderWidth="0"><DataGrid.Columns><DataGridTextColumnWidth="150"Binding="{Binding Path=Name}"Header="歌名" /><DataGridTextColumnWidth="150"Binding="{Binding Path=Singer}"Header="歌手" /><DataGridTextColumnWidth="150"Binding="{Binding Path=AlbumTitle}"Header="专辑" /><DataGridTextColumnWidth="150"Binding="{Binding Path=Lenght}"Header="时长" /></DataGrid.Columns></DataGrid><StackPanelGrid.Row="2"Grid.Column="1"Width="195"Height="40"Orientation="Horizontal"><ButtonWidth="55"Height="25"Margin="5"Content="上一曲"Template="{StaticResource ButtonTemplate}" /><ButtonGrid.Row="2"Width="55"Height="25"Margin="5"Content="播放"Template="{StaticResource ButtonTemplate}" /><ButtonGrid.Row="2"Width="55"Height="25"Margin="5"Content="下一曲"Template="{StaticResource ButtonTemplate}" /></StackPanel></Grid>
amespace Juster.Music.Models
{/// <summary>/// 歌单/// </summary>public class SongSheetModel{/// <summary>/// 歌单名称/// </summary>public string Name { get; set; }/// <summary>/// 歌单图标/// </summary>public string Icon { get; set; }/// <summary>/// 歌单里所包含的歌曲/// </summary>public List<SongModel> Songs { get; set; }public override string ToString(){return Name;}}
}
 /// <summary>/// 歌曲模型/// </summary>public class SongModel{/// <summary>/// 名称/// </summary>public string Name { get; set; }/// <summary>/// 歌曲存放地址/// </summary>public string Url { get; set; }/// <summary>/// 歌手/// </summary>public string Singer { get; set; }/// <summary>/// 歌曲时长(s)/// </summary>public int Lenght { get; set; }/// <summary>/// 专辑名称/// </summary>public string AlbumTitle { get; set; }}
public class DataService{public static List<SongSheetDTO> GetSongSheet() {List<SongSheetDTO> songSheets = new List<SongSheetDTO>();var songSheetJay = new SongSheetDTO();songSheetJay.Name = "周杰伦的歌单";songSheetJay.Icon = "/Juster.Common;component/imgs/music.png";songSheetJay.Songs = new List<SongDTO>() {new SongDTO{ Name = "七里香" , AlbumTitle = "叶惠美" , Lenght = 800 , Singer = "周杰伦" , Url = "七里香.mp3" },new SongDTO{ Name = "外婆" , AlbumTitle = "叶惠美" , Lenght = 800 , Singer = "周杰伦" , Url = "外婆.mp3" },new SongDTO{ Name = "将军" , AlbumTitle = "叶惠美" , Lenght = 800 , Singer = "周杰伦" , Url = "将军.mp3" },new SongDTO{ Name = "搁浅" , AlbumTitle = "叶惠美" , Lenght = 800 , Singer = "周杰伦" , Url = "搁浅.mp3" }};songSheets.Add(songSheetJay);var songSheetJolin = new SongSheetDTO();songSheetJolin.Name = "蔡依林的歌单";songSheetJolin.Icon = "/Juster.Common;component/imgs/music.png";songSheetJolin.Songs = new List<SongDTO>(){new SongDTO{ Name = "倒带" , AlbumTitle = "城堡" , Lenght = 800 , Singer = "蔡依林" , Url = "倒带.mp3" },new SongDTO{ Name = "爱情36计" , AlbumTitle = "城堡" , Lenght = 800 , Singer = "蔡依林" , Url = "爱情36计.mp3" },new SongDTO{ Name = "海盗" , AlbumTitle = "城堡" , Lenght = 800 , Singer = "蔡依林" , Url = "海盗.mp3" },new SongDTO{ Name = "柠檬草的味道" , AlbumTitle = "城堡" , Lenght = 800 , Singer = "蔡依林" , Url = "柠檬草的味道.mp3" }};songSheets.Add(songSheetJolin);return songSheets;}}/// <summary>/// 歌曲模型/// </summary>public class SongDTO{/// <summary>/// 名称/// </summary>public string Name { get; set; }/// <summary>/// 歌曲存放地址/// </summary>public string Url { get; set; }/// <summary>/// 歌手/// </summary>public string Singer { get; set; }/// <summary>/// 歌曲时长(s)/// </summary>public int Lenght { get; set; }/// <summary>/// 专辑名称/// </summary>public string AlbumTitle { get; set; }}/// <summary>/// 歌单/// </summary>public class SongSheetDTO{/// <summary>/// 歌单名称/// </summary>public string Name { get; set; }/// <summary>/// 歌单图标/// </summary>public string Icon { get; set; }/// <summary>/// 歌单里所包含的歌曲/// </summary>public List<SongDTO> Songs { get; set; }}

WPF入门8:模板(Template)相关推荐

  1. WPF入门(六)样式Style

    wpf提供了一种类似css的对象- style,但是比css更强大.它支持直接设定属性,更改呈现模板,触发器,事件触发等.MSDN描述如下: MSDN 可以在从 FrameworkElement 或 ...

  2. 你知道WPF这三大模板实例运用吗?

    1.介绍 对于Windows桌面端应用开发来讲,WPF以其界面渲染的特殊性,灵活的界面布局而让人津津乐道,因为它能为用户提供更好的交互体验.如何利用WPF开发出让人赏心悦目的界面与功能呢?这里不仅仅只 ...

  3. WPF入门教程系列(二) 深入剖析WPF Binding的使用方法

    同一个对象(特指System.Windows.DependencyObject的子类)的同一种属性(特指DependencyProperty)只能拥有一个binding. 这一点可以通过设置bindi ...

  4. WPF入门0:WPF的基础知识

    WPF入门0:WPF的基础知识 WPF 可创建动态的数据驱动的呈现系统. 系统的每一部分均可通过驱动行为的属性集来创建对象. 数据绑定是系统的基础部分,在每一层中均进行了集成. 传统的应用程序创建一个 ...

  5. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  6. 简述类模板函数模板template (typename T)

    相信很多刚入门c++的同学在学数据结构或者查看大佬的代码中,我们都会看到: template <typename T> 类模板; template<typename T> cl ...

  7. WPF入门(三)-几何图形之不规则图形(PathGeometry) (2)

    WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 原文:WPF入门(三)->几何图形之不规则图形(PathGeometry) (2) 上一节我们介绍了PathG ...

  8. WPF入门教程-转载

    最近为了做炫酷的UI,了解了WPF,之前一直是使用winform的,界面也是古老的不行. 在园里找到了一个大佬以前写的教程,备注一下.按照系列教程走下来,可以直接上手了. 备忘传送门>>& ...

  9. C++中的模板template

    1.Cpp中的模板template 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码.模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法都是泛型编程的例子,它们都使用了 ...

最新文章

  1. Linux Logwatch 使用说明
  2. 小功率荧光灯拆解分析
  3. 【Netty】Netty 入门案例分析 ( Netty 线程模型 | Netty 案例需求 | IntelliJ IDEA 项目导入 Netty 开发库 )
  4. [转载]今天安装sql2000,老是出挂起的错误。所以找了找看见了这个方法。
  5. 司机和售票员问题 信号signal注册一例
  6. LVS nat 负载均衡实验
  7. 在 Pycharm下使Python2和Python3共用Anaconda中的各种库/包的解决方法
  8. PS 部分技巧快捷键
  9. WPF Unleashed Chapter 2:XAML Demystified 翻译(第二部分)
  10. Js 对象添加属性
  11. 改了计算机名字后重启断网了,电脑断网重启就好了是什么回事
  12. 数据挖掘入门必看的几个问题
  13. android 仿微信 视频播放器,Android仿微信多媒体选择器 - SmartMediaPicker
  14. Xshell和Xftp官方家庭免费版
  15. 掌握农业信息化核心 物联网助力智慧农业
  16. .map文件用什么打开_Fusion 360 干货集:盘点那些可以用Fusion 360打开的设计文件...
  17. 波导理论(一)规则金属波导一般解法
  18. Spring 事务隔离
  19. Java存储 转侵删
  20. 建立您的初创公司:会议计划者背后的开源基金会

热门文章

  1. springboot毕设项目影评网站系统4i684(java+VUE+Mybatis+Maven+Mysql)
  2. Es Bucket聚合(桶聚合) Terms Aggregation与Significant Terms Aggregation
  3. 【CV】Latent diffusion model 扩散模型体验
  4. 用python实现音乐可视化
  5. Unity 中的音乐可视化
  6. eclipse报错排解
  7. python人名最多数统计,【Python 测验03】人名最多数统计
  8. 【java学习】学生管理系统项目实现(四)
  9. 如何撰写综述性科技论文(网摘)
  10. 一个永久免费的图片鉴黄api接口