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="">

  1. <!-- If the applied template does not have a <ContentPresenter>,
  2. it will not display "Click!" -->
  3. <Button Name ="myButton" Template ="{StaticResource roundButtonTemplate}">
  4. Click!
  5. </Button>

除了这点,当您定义控件模板时发现感觉类似于构建样式的进程,也不会感到惊讶。举例来说,模板通常存储在资源词典中,支持触发器等。至此,您已经很好地掌握了构建模板的方法。现在使用名为ControlTemplates的WPF Windows应用程序项目查看运行中的一些模板。

32.10 使用模板更改控件的UI的更多相关文章

  1. Windows Phone开发(10):常用控件(上)

    原文:Windows Phone开发(10):常用控件(上) Windows Phone的控件有几个来源,和传统的桌面应用程序开发或Web开发一样,有默认提供的控件和第三方开者发布的控件.一般而言,如 ...

  2. 修改Delphi 10.1.2 edit控件在android的复制、剪切和粘贴样式

    Delphi 10.1.2 edit控件在android默认的复制.剪切和粘贴样式太丑,经悟能-DelphiTeacher的提示,用最简单的代码修改后稍有改观. 默认的样式: 修改后的样式: 修改FM ...

  3. Android开发——fragment中数据传递与刷新UI(更改控件)

    数据传递: 1.通过数据库进行数据的传递 如在fragment中将数据保存在数据库中,之后其他的fragment或者activity直接读取数据库中的数据,数据库使用还算简单,这里就不多说,建议使用l ...

  4. WPF编程,通过Double Animation动态更改控件属性的一种方法。

    原文:WPF编程,通过Double Animation动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/a ...

  5. WPF编程,通过【帧】动态更改控件属性的一种方法。

    原文:WPF编程,通过[帧]动态更改控件属性的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/article/detail ...

  6. Delphi 10 Seattle 小票打印控件TQ_Printer

    TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...

  7. WPF数据模板和控件模板

     WPF中有控件模板和数据模板,控件模板可以让我们自定义控件的外观,而数据模板定义了数据的显示方式,也就是数据对象的可视结构,但是这里有一个问题需要考虑,数据是如何显示出来的?虽然数据模板定义了数 ...

  8. [WPF]使用CheckAccess检测是否在控件的ui线程上执行

    private void Parallel(object sender, RoutedEventArgs e) { Task.Run(() => ChangeColour(Brushes.Red ...

  9. c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集

    界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...

随机推荐

  1. [Oracle] 临时将Physical Standby激活

    Oracle 10g/11g下如何将物理Standby库临时激活用于测试 在实际运营环境中, 我们经常碰到类似这样的需求: 譬如想不影响现网业务评估DB补丁在现网环境中运行的时间, 或者是想在做DB切 ...

  2. hdu 2824(欧拉函数)

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  3. WKWebView携带不上cookie的问题处理

    自从WKWebView推出后Apple官方及众多开发者都推荐使用它代替UIWebView,确实通过加载速度.占用内存方面的对比都要好上几个档次,索性就把项目中的浏览器控件换成了WKWebView,一开 ...

  4. Pacman常用命令

    Pacman是Arch Linux 的包管理器.它将一个简单的二进制包格式和易用的构建系统结合了起来.不管软件包是来自官方的 Arch 库还是用户自己创建,Pacman 都能方便得管理. 更新系统 在 ...

  5. Codeforces Round #466 (Div. 2) A. Points on the line[数轴上有n个点,问最少去掉多少个点才能使剩下的点的最大距离为不超过k。]

    A. Points on the line time limit per test 1 second memory limit per test 256 megabytes input standar ...

  6. EasyMvc入门教程-基本控件说明(5)小图标

    我们网页很多时候需要小图标来进行美化,EasyMvc默认提供了100多种常用小图标,您可以根据实际情况选择使用,请看下面的例子: @Html.Q().Ico().Type(EasyMvcHelper. ...

  7. 国家商用password(五)基于SM2的软件授权码生成及校验

    将公开密钥算法作为软件注冊算法的优点是Cracker非常难通过跟踪验证算法得到注冊机.以下.将介绍使用SM2国密算法进行软件注冊的方法. 生成授权码 选择SM2椭圆曲线參数(P,a,b,N,Gx,Gy ...

  8. sprinvmvc整合swagger实现实时接口信息展示

    1.pom.xml引入swagger插件 <dependency> <groupId>io.springfox</groupId> <artifactId&g ...

  9. Linux:和任务执行相关的 【批命令执行 runparts 】命令

    run-parts:执行目录下的 命令或脚本 工具,其他非可执行文件和子目录下的文件不会被执行.目录下的命令,是以基本的词汇(字符)顺序执行的,除非你指定了--reverse 逆序选项!这是个老牌的G ...

  10. 【X240 QQ视频对方听不到声音】解决方法

    [X240 QQ视频对方听不到声音]解决方法: win7为例: 右键点击右下角的"小喇叭"图标,点击"录音设备",显演示样例如以下图: watermark/2/ ...