【转】WPF中关于样式和模板的区别

1.WPF样式
类似于Web应用程序中的CSS,在WPF中可以为控件定义统一的样式(Style)。样式属于资源的一种,例如为Button定义统一的背景颜色和字体:
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
</Window.Resources>
<StackPanel>
<Button>Button A</Button>
</StackPanel>
在Style中定义的属性及值,影响到Window中的所有类型为Button的控件的样式
这种样式,类似于CSS中的类型选择器,为某种类型定义样式。
此外还可以在Style中加入x:Key属性,做为特定的样式(注意,这种也需要定义TargetType);
在第一个样式的基础上创建一个新样式可以达到这一目的,如下所示:<Window.Resources>
<Style x:Key="BigFontButtonStyle">
<Setter Property="Control.FontFamily" Value="Times New Roman" />
<Setter Property="Control.FontSize" Value="18" />
<Setter Property="Control.FontWeight" Value="Bold" />
</Style>
<Style x:Key="EmphasizedBigFontButtonStyle" BasedOn="{StaticResource BigFontButtonStyle}">
<Setter Property="Control.Foreground" Value="White" />
<Setter Property="Control.Background" Value="DarkBlue" />
</Style>
</Window.Resources>
以编程方式设置样式,若要以编程方式向元素分配命名样式,请从资源集合中获取该样式,然后将其分配给元素的 Style 属性。请注意,资源集合中的项是 Object
类型,因此,将检索到的样式分配给 Style 属性之前,必须将该样式强制转换为 Style。例如,若要对名为 textblock1 的
TextBlock 设置定义的 TitleText 样式,请执行以下操作:
textblock1.style=(style)Resources["TitleText"];
请注意,样式一旦应用,便会密封并且无法更改。如果要动态更改已应用的样式,必须创建一个新样式来替换现有样式。
2.wpf模板
当一个控件的外观不满足要求的时候,我们可以使用“控件模板”的方式更改控件的外观,WPF中的所有控件,只要有视觉外观,
就会有Template
property,且将此property的值设定为一个ControlTemplate对象。Button之所以看起来像Button就是因为受到了
ControlTemplate对象的直接影响。ControlTemplate对象定义了控件的完整外观,且你可以替换此对象。

抽象的FrameworkTemplate类型只定义了三个property。只读的Boolean
property用来标识此模板是否可以被修改。Resources
property的类型是ResourceDictionary,让我们定义一些只能够在模板内部使用的资源。第三个property最重要,叫做
visualTree,定义组成此控件外观的Element的layout。
ControlTemplate类型多加了两个property定义:TargetType用来指明,哪个类型的控件,适合应用到该模板;Triggers是Trigger对象的collection。

所有派生自ContentControl的类型都使用ContentPresenter类型的对象来显示它们的内容。ContentPresenter派
生自FrameworkElement,你可以在模板的视觉树内包含一个ContentPresenter对象,用来盛放模板中要放置的内容。
ContentPresenter
element负责显示所有“派生自ContentControl”控件的内容。ContentPresenter将这个世界分成两类对
象:UIElement的后代和非UIElement的后代,对于非UIElement的后代,ContentPresenter会调用对象的
ToString方法,用文本来展示该对象。这个功能让“派生自ContentControl”的控件可以用来显示任何种类的内容。
<Window.Resources>
<Style TargetType="Button" x:Key="ButtonStyle">
<!--设置按钮的默认的样式-->
<Setter Property="FontFamily" Value="Comic Sans MS"/>
</Setter>
<!--设置按钮的模板-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<Ellipse Fill="{TemplateBinding Background}"/>
<ContentPresenter
Margin="5"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<StackPanel>
<Button Margin="5" Style="{StaticResource ButtonStyle}"
Width="100" Height="100"
Content="My Button">
</Button>
<Button Margin="5" Width="200">Common Button</Button>
</StackPanel>。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436858.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt实现多屏幕多分辨率自适应

这里仅大概描述一下实现思路。 运行条件 两个屏幕&#xff0c;分辨率不同。Qt软件 问题提出 前段时间写了一个软件&#xff0c;窗口内有自绘内容。 自绘内容里面用的长度单位都是像素。可想而知&#xff0c;在开发者的电脑屏幕上大小都是符合要求的。到这一步都没问题。 软…

您需要来自pc的权限才能_微信电脑版还是鸡肋吗?微信PC版3.0内测体验

[PConline 应用]微信PC版3.0来了&#xff01;这到底是个怎样的版本&#xff1f;先说结果吧&#xff0c;好消息是微信PC端新版很快就要上线了&#xff0c;坏消息是这一回采用是邀请内测制&#xff0c;注定了很多人只能等到正式上线后&#xff0c;才能见到新版本&#xff01;目前…

【转】【MySQL】事务与锁(四):行锁到底锁住的是什么?记录?字段?索引?

首先我们有三张表t1,t2,t3&#xff0c;它们都是只有两个字段&#xff0c; int类型的id和varchar类型的name&#xff1b;区别是t1没有索引&#xff0c;t2有主键索引&#xff0c;t3有唯一索引。 再强调一次&#xff0c;在实验前必须提前关闭自动提交&#xff0c;set autocommitof…

【编译原理】理解BNF

BNF范式 下面来自百度百科&#xff1a; 巴科斯范式&#xff08;BNF&#xff09;所描述的语法是与上下文无关的。它具有语法简单&#xff0c;表示明确&#xff0c;便于语法分析和编译的特点。 源码解析使用的算法就是BNF或者其改进算法。 什么是上下文无关文法呢&#xff1f; …

gibmacos 网络加速_黑苹果教程续集,利用EFI在线安装MacOS

本内容来源于什么值得买APP&#xff0c;观点仅代表作者本人 &#xff5c;作者&#xff1a;qianseyue创作立场声明&#xff1a;本人非某领域/某品牌从业人员&#xff0c;有机会学到一些专业知识。然而每个人站在不同立场&#xff0c;内容就会有所偏重&#xff0c;客观与否还请大…

【转】1.1【MySQL】基本SQL语句大全

1.库操作 登录数据库&#xff08;-h -u -p -P都不需要空格&#xff09; mysql -h {ip} -u {username} -p{password} -P {port} # -h ip默认是 localhost # -p 指定密码时中间不要空格&#xff0c;比如 -p123456 # -P 端口默认是 3306 1.1 增 create database 库名1.2 删 dr…

【GUI开发】图像处理类软件的浏览功能实现模型

图像处理软件包括但不限于&#xff1a; 图片浏览器&#xff0c;2D地图浏览器、图片编辑器等软件。 为了处理大分辨率图片&#xff0c;一般采用GDAL加载图像&#xff0c;GDAL可以动态加载图像的一部分&#xff0c;可以建立图像金字塔&#xff0c;优化加载速度。 一般的图像处理…

自动事务_JDBC进阶(二)事务编程

一、事务简介事务是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。事务具有ACID特性&#xff1a;原子性&#xff08;Atomicity&#xff09; —— 原子性是指事务是一个不可分割的工作单位&#xff0c…

【转】事务和锁机制是什么关系? 开启事务就自动加锁了吗?

数据库锁 因为数据库要解决并发控制问题。在同一时刻&#xff0c;可能会有多个客户端对同一张表进行操作&#xff0c;比如有的在读取该行数据&#xff0c;其他的尝试去删除它。为了保证数据的一致性&#xff0c;数据库就要对这种并发操作进行控制&#xff0c;因此就有了锁的概…

【精华】详解Qt中的内存管理机制

前言 内存管理&#xff0c;是对软件中内存资源的分配与释放进行有效管理的方法和理论。 众所周知&#xff0c;内存管理是软件开发的一个重要的内容。软件规模越大&#xff0c;内存管理可能出现的问题越多。如果像C语言一样手动地管理内存&#xff0c;一会给开发人员带来巨大的…

a标签里面设置onclick_实现a标签中的各种点击(onclick)事件的方法

我们常用的在a标签中有点击事件&#xff1a;1. a href"javascript:js_method();"这是我们平台上常用的方法&#xff0c;但是这种方法在传递this等参数的时候很容易出问题&#xff0c;而且javascript:协议作为a的href属性的时候不仅会导致不必要的触发window.onbefore…

【转】2.1【MySQL】运行原理(一):查询sql的执行过程及MySQL架构分析

MySQL的发展历史和版本分支&#xff1a; 时间里程碑1996 年MySQL1.0 发布。它的历史可以追溯到 1979 年&#xff0c;作者 Monty 用 BASIC 设计的一个报表工具。1996 年 10 月3.11.1 发布。MySQL 没有 2.x 版本。2000 年ISAM 升级成 MyISAM 引擎。MySQL 开源。2003 年MySQL4.0 …

docker多个容器一起打包_如何链接多个Docker容器并封装结果?

在另一个容器中运行容器意味着在Docker容器中运行Docker引擎.这被称为Docker-in-Docker的dind,我强烈反对它.你可以在线搜索’dind’并发现为什么在大多数情况下这是一个坏主意,但由于它不是你问题的主要对象,我不会进一步扩展这个主题.在同一容器中运行node.js进程和neo4j进程…

【转】2.2【MySQL】运行原理(二):InnoDB 内存结构、磁盘结构及update sql执行过程分析

前一篇讲完了查询流程&#xff0c;我们是不是再讲讲更新流程、插入流程和删除流程&#xff1f;在数据库里面&#xff0c;我们说的update操作其实包括了更新、插入和删除。如果大家有看过MyBatis的源码&#xff0c;应该知道Executor里面也只有doQuery()和doUpdate()的方法&#…

单片机ch2o程序_基于单片机的室内甲醛浓度检测系统

基于单片机的室内甲醛浓度检测系统田秀荣【期刊名称】《山西电子技术》【年(卷),期】2014(000)003【摘要】Aseveryoneknows,theharmfulgasremainedbyhousedecorationandinferiorfurnitureismainlyformaldehydewhichhasgreat harm to human body health , many diseases is rele…

【转】MySQL中select * for update锁表的问题

MySQL中select * for update锁表的问题 由于InnoDB预设是Row-Level Lock&#xff0c;所以只有「明确」的指定主键&#xff0c;MySQL才会执行Row lock (只锁住被选取的资料例) &#xff0c;否则MySQL将会执行Table Lock (将整个资料表单给锁住)。 举个例子: 假设有个表单produc…

apqp过程流程图范本_APQP项目资料清单excel格式(全套)

APQP项目开发全套资料明细表设施要求新增刀具验收报告 量具、试验装备 要求 量具试验装备清单 新增量具试验装备计划技术/生产 技术/质保 采购▲ ★ ▲ ▲2.162.17项目组 新设备、工装和 A-3新设备、工装、刀具和试验 试验装置评审 装置检查清单 财务/技术2.18 新产品成本预算 …

【转】2.3【MySQL】运行原理(三)InnoDB 逻辑存储结构

MySQL的存储结构分为5级&#xff1a;表空间、段、簇、页、行。 1.表空间 TableSpace 上篇【MySQL】从InnoDB的内存结构、磁盘结构到update sql执行过程分析 在磁盘结构部分就说过了&#xff0c;表空间可以看做是InnoDB 存储引擎逻辑结构的最高层&#xff0c;所有的数据都存放在…

layui templet格式化_layui数据表格日期如何格式化成2012-12-30这样的?

test学生评优评先系统学生信息管理学生信息查询学生信息添加注册登录查看编辑删除$(function () {layui.use("table", function () {var $table layui.table;//第一个实例$table.render({elem: #stu,height: 300,//数据接口,url: /stu/student/getAllClazz,//开启分…

【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)

MySQL中有六种日志文件&#xff0c;分别是&#xff1a;重做日志&#xff08;redo log&#xff09;、回滚日志&#xff08;undo log&#xff09;、二进制日志&#xff08;binlog&#xff09;、错误日志&#xff08;errorlog&#xff09;、慢查询日志&#xff08;slow query log&…