32.10 使用模板更改控件的UI
32.10 使用模板更改控件的UI
样式是改变WPF控件基本外形的非常好(且非常简单)的方式,它通过为窗口部件的特性设置建立一组默认的值,从而改变WPF控件的基本外形。但是,即使样式允许我们改变各种UI设置,窗口部件的整个外观依然保持完整。不管我们利用各种特性制作出怎样的Button样式,但是基础的仍然是我们熟悉多年的矩形窗口部件。
然而,如果您希望完全取代Button类型的外观(如六角形的三维图像)但是保留其作为Button的行为,那该怎么办呢?如果希望利用WPF进程栏的功能,但是又希望以饼图图表百分之百地渲染它的UI,那又该怎么办呢?并不需要手动构建自定义控件(如我们处理许多其他GUI工具箱时的做法),WPF提供了控件模板。
模板将控件的UI(例如,外观)和控件的行为(例如,它对事件和方法的设置)完全分离开来。利用模板,可以自由地完全改变WPF窗口部件的渲染输出。从编程的方式讲,控件模板由ControlTemplate基类代表,该基类在XAML中使用相同命名的<ControlTemplate>元素表达。一旦建立了模板,就可以使用Template特性将其连接到WPF页面、窗口或者控件。
构建控件模板的一个重要方面就是,使用<ContentPresenter>元素完全控制窗口部件的内容在模板中的定位方式。使用该元素,可以为给定控件模板指定内容的位置和UI。更重要的是,如果模板中没有定义<ContentPresenter>元素,使用该元素的控件将不会渲染任何内容,即使控件定义了内容。
<style x:key =< span="">
- <!-- If the applied template does not have a <ContentPresenter>,
- it will not display "Click!" -->
- <Button Name ="myButton" Template ="{StaticResource roundButtonTemplate}">
- Click!
- </Button>
除了这点,当您定义控件模板时发现感觉类似于构建样式的进程,也不会感到惊讶。举例来说,模板通常存储在资源词典中,支持触发器等。至此,您已经很好地掌握了构建模板的方法。现在使用名为ControlTemplates的WPF Windows应用程序项目查看运行中的一些模板。
32.10 使用模板更改控件的UI的更多相关文章
- Windows Phone开发(10):常用控件(上)
原文:Windows Phone开发(10):常用控件(上) Windows Phone的控件有几个来源,和传统的桌面应用程序开发或Web开发一样,有默认提供的控件和第三方开者发布的控件.一般而言,如 ...
- 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式
Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...
- Android开发——fragment中数据传递与刷新UI(更改控件)
数据传递: 1.通过数据库进行数据的传递 如在fragment中将数据保存在数据库中,之后其他的fragment或者activity直接读取数据库中的数据,数据库使用还算简单,这里就不多说,建议使用l ...
- WPF编程,通过Double Animation动态更改控件属性的一种方法。
原文:WPF编程,通过Double Animation动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/a ...
- WPF编程,通过【帧】动态更改控件属性的一种方法。
原文:WPF编程,通过[帧]动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...
- Delphi 10 Seattle 小票打印控件TQ_Printer
TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...
- WPF数据模板和控件模板
WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...
- [WPF]使用CheckAccess检测是否在控件的ui线程上执行
private void Parallel(object sender, RoutedEventArgs e) { Task.Run(() => ChangeColour(Brushes.Red ...
- c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集
界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...
随机推荐
- hdu 4858(简单模拟)
项目管理 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- LeetCode OJ-- Linked List Cycle II **
https://oj.leetcode.com/problems/linked-list-cycle-ii/ 判断一个链表中是否有环,如果有,求环的开始位置. 按照上道题目的想法,先判断出是否有环来, ...
- springBoot 读取配置文件yml中的信息
yml中自定义一些变量 var: analyze_url: test ocr_url: test microsoft_key: test 映射到类变量中 @Getter @Component publ ...
- SQLite添加列的限制
SQLite添加列的限制 向SQLite表中添加字段,需要注意以下问题: (1)添加的列不能定义为主键. (2)添加的列为日期时间类型,不能使用CURRENT_TIME.CURRENT_DATE. ...
- path.join 与 path.resolve 的区别
1. 对于以/开始的路径片段,path.join只是简单的将该路径片段进行拼接,而path.resolve将以/开始的路径片段作为根目录,在此之前的路径将会被丢弃,就像是在terminal中使用cd命 ...
- workflow engine Ruote初体验之三(条件与美元符号)
条件 我们可以用:if和:unless公共属性来进行条件判断,或者使用if,given,once或者equals(已经过时)关键字. 使用:if属性: 1 cursor do 2 participan ...
- 记录一次(xheditor-1.1.6-zh-cn.min.js)的错误:Cannot read property 'match' of undefined的问题解决
由于使用了xheditor富文本框,且这个版本是2011年开发的系统,当时只有IE8,所以一切正常. 但是问题来了,今天使用IE11测试和谷歌浏览器测试,发现一直报这个错误: 且google了一下,没 ...
- 七天学会ASP.NET MVC (三)——ASP.Net MVC 数据处理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_three.html 第三天我们将学习Asp.Net中数据处理功能,了解数据访问层,EF,以及EF中常用的代码实 ...
- 【Salvation】——人物角色动画实现
写在前面:这个角色动画主要使用JavaScript编写脚本,在Unity3D游戏引擎的环境中实现. 一.显示角色并实现镜像效果 1.显示贴图: create→cube→修改名称为player,位置归0 ...
- 2017.2.21 activiti实战--第七章--Activiti与spring集成(一)配置文件
学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 ...