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 ...
随机推荐
- linux 实现共享内存同步
本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝.它是IPC对象的一种. 为了在多个进程间交换信息,内核专门留出了 ...
- javascript 动态添加城市
匿名函数的使用 createTextnode 创建文本 createElement 创建元素 appendChild 将文本或元素追加 <!DOCTYPE html> < ...
- AC日记——[HAOI2007]理想的正方形 P2216
[HAOI2007] 理想的正方形 思路: 正解多个单调队列: 但是我用树套树水了过去: 来,上代码: #include <cstdio> #include <cstring> ...
- AC日记——黑魔法师之门 codevs 1995
1995 黑魔法师之门 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 经过了16个工作日的紧张 ...
- ARM, X86和MIPS
ARM ARM架构,过去称作高级精简指令集机器(Advanced RISC Machine,更早称作:Acorn RISC Machine),是一个32位精简指令集reduced instructio ...
- Java IO 流 设计模式
学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了.这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的. 为什么不用继承而用装饰模式 我们知道Ja ...
- char可不可以存汉字
常见的面试题:char类型的变量可不可以存汉字 答案是可以的,char类型中存储的是Unicode编码,Unicode编码中是存在存在中文的,所以Char自然可以存储汉字,但是!仅限于Unicode中 ...
- SecureCRT分屏显示
[Tab右键]或者[Session Manager右键]->[Send to New Tab Group]
- advanced-performance-troubleshooting-waits-latches-spinlocks
https://www.sqlskills.com/blogs/paul/advanced-performance-troubleshooting-waits-latches-spinlocks/
- Android 日期对话框DatePickerDialog
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@ ...