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. Python 多核 多线程 调度

    参考: http://www.oschina.net/translate/pythons-hardest-problem https://news.ycombinator.com/item?id=58 ...

  2. C语言集锦(三)Direct3D和GDI+的例子

    0.前言 有些时候你可能想了解,如何用纯C语言来写Direct3D和GDI+的Demo.注意,下面的Direct3D例子不适用于TCC编译器,GDI+的例子是可以的. 1.Direct3D C语言的例 ...

  3. 354. Russian Doll Envelopes

    You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...

  4. ORACLE的字符串操作函数

    字符函数——返回字符值 这些函数全都接收的是字符族类型的参数(CHR 除外)并且返回字符值.除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.字符函数的返回类型所受的限制和基本数据库类 ...

  5. 使用企业微信的API给指定用户发送消息

    上个月比较忙,等不忙了继续写点基础教程(五一还在高铁上写项目在).因为公司的原因,自己学习了点JavaWeb的知识,重新写了一个简单的后台管理,用于记录用户注册信息的.其中有这样的一个要求,就是在用户 ...

  6. Java IO设计模式

    JAVA IO 设计模式彻底分析 2011-01-06 14:20:09|  分类: java|字号 订阅 http://blog.csdn.net/tianyue168/archive/2010/0 ...

  7. luogu P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows

    题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...

  8. 在Android中实现阴影效果

    在Android L推出后,Google提出了全新的设计语言:材质设计.其中很重要的一点就是阴影效果的使用,你可以为每一个View设置一个elevation值,相当于除了x.y之外的z值,z值决定了阴 ...

  9. RecycleViewScrollHelper--RecyclerView滑动事件检测的辅助类

    目录 概述 这是一个关于RecycleView滑动事件的辅助类,该辅助类可以检测RecycleView滑动到顶部或者底部的状态. 可用于实现RecycleView加载更多或者刷新(虽然刷新可以直接用S ...

  10. 计算机网络自顶向下第三章传输层二TCP

    TCP 全双工 A-B,B-A 点对点 一对一的 TCP连接建立过程 客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来相应,最后,客户再用第三个特殊的报文段作为相应,前两个报文段 ...