WPF -- DataTemplate与ControlTemplate结合使用
如深入浅出WPF中的描述,DataTemplate为数据的外衣,ControlTemplate为控件的外衣。ControlTemplate控制控件的样式,DataTemplate控制数据显示的样式,DataTemplate是ControlTemplate的一部分。本文介绍DataTemplate与ControlTemplate结合使用的方法,其关键在于ContentPresenter,它是DataTemplate的树根,代表DataTemplate的实例。
场景
自定义Button,使其显示当前页与总页数,当页码变化时自动更新。
实现步骤
- 自定义Button.ControlTemplate;
- 自定义Button.ContentTemplate;
- 创建数据类;
- 创建ViewModel类;
- 绑定。
示例代码:
// xaml
<UserControl.Resources>
<viewmodel:TextViewModel x:Key="TestViewModel"/>
</UserControl.Resources>
<Grid DataContext="{StaticResource TextViewModel}">
<Button Width="120" Height="50" Content="{Binding PageInfo}">
<Button.Template>
<ControlTemplate TargetType="Button">
<ContentPresenter/>
</ControlTemplate>
</Button.Template>
<Button.ContentTemplate>
<DataTemplate>
<TextBlock Width="{TemplateBinding Width}" TextAlignment="Center"
FontSize="36" FontFamily="微软雅黑" Foreground="#ffffff">
<Run Text="{Binding CurrentPage}"/>
<Run Text="/"/>
<Run Text="{Binding TotalPages}"/>
</TextBlock>
</DataTemplate>
</Button.ContentTemplate>
</Button>
</Grid>
// 数据类
public class PageInfo : ViewModelBase
{
public PageInfo(string currentPage, string totalPages)
{
this.CurrentPage = currentPage;
this.TotalPages = totalPages;
}
public string CurrentPage
{
get { return currentPage; }
set
{
currentPage = value;
OnPropertyChanged("CurrentPage");
}
}
public string TotalPages
{
get { return totalPages; }
set
{
totalPages = value;
OnPropertyChanged("TotalPages");
}
}
private string currentPage;
private string totalPages;
}
// viewmodel类
public class TestViewModel : ViewModelBase
{
public TextViewModel()
{
PageInfo = new PageInfo("1", "1");
}
public PageInfo PageInfo
{
get { return pageInfo; }
set { pageInfo = value; }
}
// 其它逻辑
private PageInfo pageInfo;
}
WPF -- DataTemplate与ControlTemplate结合使用的更多相关文章
- WPF DataTemplate與ControlTemplate
一. 前言 什麼是DataTemplate? 什麼是ControlTemplate? 在stackoverflow有句簡短的解釋 "A DataTemplate, therefore ...
- WPF Template模版之DataTemplate与ControlTemplate【一】
WPF Template模版之DataTemplate与ControlTemplate[一] 标签: Wpf模版 2015-04-19 11:52 510人阅读 评论(0) 收藏 举报 分类: -- ...
- WPF Template模版之DataTemplate与ControlTemplate的关系和应用【二】
1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...
- [WPF]如何使用代码创建DataTemplate(或者ControlTemplate)
1. 前言 上一篇文章([UWP]如何使用代码创建DataTemplate(或者ControlTemplate))介绍了在UWP上的情况,这篇文章再稍微介绍在WPF上如何实现. 2. 使用Framew ...
- 【转】WPF Template模版之DataTemplate与ControlTemplate的关系和应用(二)
1. DataTemplate和ControlTemplate的关系 学习过DataTemplate和ControlTemplate,你应该已经体会到,控件只是数据的行为和载体,是个抽象的概念,至于它 ...
- DataTemplate和ControlTemplate的关系
DataTemplate和ControlTemplate的关系(转载自haiziguo) 一.ContentControl中的DataTemplate 在开始之前,我们先去看一下ContentCont ...
- WPF中的ControlTemplate(控件模板)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板) ...
- [UWP]如何使用代码创建DataTemplate(或者ControlTemplate)
1. 前言 在UWP中DataTemplate是一个十分重要的功能,并且几乎无处不在,例如DataGrid中的DataGridTemplateColumn: <controls:DataGrid ...
- WPF中的ControlTemplate(控件模板)
原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板) ...
随机推荐
- 这次一定要记住opencv和cv2是什么及其基础用法
opencv是一个基于BSD许可发行(也就是俗称的开源)的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS上.由一系列 C 函数和少量 C++ 类构成的它轻量且高 ...
- 一个ftp协议传输文件之后执行脚本无法工作的情况
作者:良知犹存 转载授权以及围观:欢迎添加微信号:Conscience_Remains 总述 移植一个文件系统时候,我在window下git clone了对方仓库源码,然后用FileZ ...
- P1908 逆序对——树状数组&离散化&快读快写の学习
题目简述: 对于给定的一段正整数序列,逆序对就是序列中 a_i>a_jai>aj 且 i<ji<j 的有序对. 输出序列中逆序对的数目. 知识补充: 树状数组: 这东西就是 ...
- Luogu T16048 会议选址
本题idea版权来自CSDN博客Steve_Junior的医院设置2. 并没有什么用的链接 题目背景 \(A\)国的国情十分独特.它总共有\(n\)个城市,由\(n-1\)条道路连接.国内的城市当然是 ...
- hdu 01 Matrix
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission ...
- 母函数 <普通母函数(HDU - 1028 ) && 指数型母函数(hdu1521)>
给出我初学时看的文章:母函数(对于初学者的最容易理解的) 普通母函数--------->HDU - 1028 例题:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? ...
- Educational Codeforces Round 96 (Rated for Div. 2) D. String Deletion (思维)
题意:有一个\(01\)串,每次操作要先删除一个位置上的元素,然后删除相同前缀和,直到字符串被删完,问最多能操作多少次. 题解: 对于一个长度大于\(1\)的相同前缀,我们最多只能对它操作一次,然后就 ...
- Codeforces Round #479 (Div. 3) E. Cyclic Components (思维,DFS)
题意:给你\(n\)个顶点和\(m\)条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解:不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后 ...
- BeautifulSoup select方法
1 html = """ 2 <html><head><title>The Dormouse's story</title> ...
- K8S(12)配置中心实战-多环境交付apollo三组件
k8s配置中心实战-多环境交付apollo三组件 目录 k8s配置中心实战-多环境交付apollo三组件 1.环境准备工作 1.1 zk环境拆分 1.2 namespace分环境 1.3 数据库拆分 ...