WPF数据模板和控件模板
WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数据的可视结构,但是我们清楚的知道,只有控件才是可视的,数据一般是被控件承载,这里需要另外的一个对象ContentPresenter。
ContentPresenter继承自FrameworkElement,从字面意思可以知道该对象是用来显示Content,说道content我们应该不陌生,因为在WPF中有一类组件就因为该属性而划分。ContentControl控件,该类型的控件都具有content属性,是一个object,也就是说ContentControl 可以包含任意类型的CLR对象 (如string或 DateTime 对象) 或 UIElement 对象 (如 Rectangle 或 Panel),,这样我们便可以添加丰富内容到控件 (如 Button 和 CheckBox,例如给TextBox添加一个string对象作为水印内容)。 也就是说,像Button等的content属性是由ContentControl类定义的,目的是为了将Content的内容显示在窗体上,那么ContentControl类是如何工作的呢?这时就要去了解ContentPresenter类,ContentPresenter的作用就是显示内容,因为Control类没有Content属性,所以在Controls类上就实现了一个ContentControl类,然后ContentPresenter负责将ContentControl的Content属性显示出来。每个控件都有一个默认的ContentPresenter用于显示Content内容,这种控件被称为内容控件。在继承Control类的情况下,我们同时可以使用ContentPresenter类,不过需要自己准备一个属性与其Content属性绑定。
ContentControl是一个拥有ControlTemplate的控件,用来显示单个非集合数据,而该属性是DataTemlpate类型,通常使用DataTemplate 指定数据的直观表示,数据模板作用于所有继承自ContentControl的内容控件的ContentTemplate属性和所有继承自ItemsControl的列表控件的ItemTemplate属性,即用于设置控件的数据内容。当您将 ItemsControl(如 ListBox)绑定到整个集合时,DataTemplate 对象尤其有用。如果没有特殊说明,ListBox 将在集合中显示对象的字符串表示形式。在此情况下,可以使用 DataTemplate 定义数据对象的外观,(为了正常的显示也可以重写tostring方法)。DataTemplate 的内容变成数据对象的可视结构。
可以在 DataTemplate 中使用数据绑定。例如,假定 ListBox 绑定到 Customer 对象的集合,并且将 ItemTemplate 属性设置为 DataTemplate。创建 ListBox 时,将为集合中的每个 Customer 创建一个 ListBoxItem,并将 ListBoxItem 的 DataContext 设置为相应的客户。也就是说,第一个 ListBoxItem 的 DataContext 设置为第一个客户,第二个 ListBoxItem 的 DataContext 设置为第二个客户,依此类推。可以将 DataTemplate 中的元素绑定到 Customer 对象的属性。简单的说数据模板就是在不改变控件外观的情况下,对内容的修改。
<CheckBox Template="{StaticResource ResourceKey=rect}">
<CheckBox.ContentTemplate>
<DataTemplate>
<CheckBox Content="Hello" />
</DataTemplate>
</CheckBox.ContentTemplate>
</CheckBox>
WPF数据模板和控件模板的更多相关文章
- WPF中的ControlTemplate(控件模板)(转)
原文地址 http://www.cnblogs.com/zhouyinhui/archive/2007/03/28/690993.html WPF中的ControlTemplate(控件模板) ...
- WPF中的ControlTemplate(控件模板)
原文:WPF中的ControlTemplate(控件模板) WPF中的ControlTemplate(控件模板) ...
- [转]WPF中的ControlTemplate(控件模板)
WPF中的ControlTemplate(控件模板) ...
- WPF基础篇之控件模板(ControlTemplate)
WPF中每一个控件都有一个默认的模板,该模板描述了控件的外观以及外观对外界刺激所做出的反应.我们可以自定义一个模板来替换掉控件的默认模板以便打造个性化的控件. 与Style不同,Style只能改变控件 ...
- WPF 中动态改变控件模板
在某些项目中,可能需要动态的改变控件的模板,例如软件中可以选择不同的主题,在不同的主题下软件界面.控件的样式都会有所不同,这时即可通过改变控件模板的方式实现期望的功能. 基本方法是当用户点击切换主题按 ...
- 转载 WPF -- 控件模板 (ControlTemplate)(一) https://blog.csdn.net/qq_23018459/article/details/79899838
ControlTemplate(控件模板) https://blog.csdn.net/qq_23018459/article/details/79899838 WPF包含数据模板和控件模板,其中 ...
- Blend 2015 教程 (四)控件模板
前一篇讲述了修改ListBox样式的方法,本篇将修改性别显示区域的样式. 1. 选择ListBox控件,编辑ItemTemplate的当前项,选择CheckBox控件,在美工板导航栏中点击CheckB ...
- [UE4]控件模板
控件模板:一个UI可以作为另外一个UI的子控件,这个子控件就是控件模板. 控件模板一般使用“Size Box”组件作为根节点,给“Size Box”组件设置合适的尺寸,显示模式选择“Desired”, ...
- Xamarin XAML语言教程构建ControlTemplate控件模板
Xamarin XAML语言教程构建ControlTemplate控件模板 控件模板ControlTemplate ControlTemplate是从Xamarin.Forms 2.1.0开始被引入的 ...
随机推荐
- javax.servlet.WriteListener
http://www.programcreek.com/java-api-examples/index.php?api=javax.servlet.WriteListener
- CentOS 7安装fcitx中文输入法
安装过程例如以下: 1.增加EPEL源 EPEL7差点儿是CentOS必备的源: sudo yum install epel-release 2.加入mosquito-myrepo源 mosquito ...
- 【poj3468】A Simple Problem with Integers
Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 97008 Accepted: 30285 Case Time Limi ...
- 数据结构与算法——常用数据结构及其Java实现
前言 仿佛一下子,2017年就快过去一半了,研一马上就要成为过去式了,我打算抓住研一的尾巴,好好梳理一下数据结构与算法,毕竟这些基础知识是很重要的嘛.所以准备在这里搞一个系列的文章,以期透彻. 本系列 ...
- js获取计算后的样式表
在编写html时,使用dom对象的style属性可以获取标签里的style属性,但是不能获取单独css样式文件或者style标签的属性值 <div style="width:10px& ...
- EXTJS和javaweb应用的开发思路
近期.做些几个基于extjs界面的应用.在此.总结一下要点.标题是基于javaweb,可是基本上各种server端语言都适用.使用Extjs做界面,无非就是取消了原来非常多的jsp文件,转而使用Ext ...
- mysql半同步复制实现
mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下.Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Mast ...
- Linux下用GCC
Linux下用GCC 前言 离职前对做过的支付系统进行了一番#总结,继续完善我的C服务器. 本想着接下来大概实现一下 CGI 协议,但是实现过程中被一个问题卡住了: C进程与php进程的交互数据类型问 ...
- Android分享介绍
一.使用系统分享 public void execShare(Activity context,String title,String text){ Intent intent = new Inten ...
- MATLAB使用入门
作者:朱金灿 来源:http://blog.csdn.net/clever101 初步学习了MATLAB的使用,发现MATLAB是一个很好的算法仿真工具.MATLAB也是一门语言,是否会使用这门语言编 ...