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>。

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

  1. php样式模板,word样式和模板的区别

    word样式和模板的区别: 样式是被包含在模板中的重要元素之一,而且是最重要的元素.模板就是能把在制作某个文档中所创建的样式都保存下来,供以后处理同类型的文档使用. 所谓样式,就是将修饰某一类段落的一 ...

  2. 如何理解WPF中的样式(Style)与模板ControlTemplate

    1.如何理解WPF中的Style Style作用: a.样式设置,用来为一组相同控件设置统一的样式 b.只能改变控件的已有属性值(比如颜色字体) 样式 作用 Style Style.Resource ...

  3. WPF控件样式、模板

    初次写博客,新手请多指教. 写WPF已有一年有余了,平时在工作项目当中喜欢总结一些公用库,通用样式之类的,以便于日后工作中遇到,可以直接复用,提供工作效率. 本文提供 Windows.Button.S ...

  4. WPF QuickStart系列之样式和模板(Style and Template)

    原文:WPF QuickStart系列之样式和模板(Style and Template) 在WPF桌面程序中,当我们想构建一个统一的UI表现时(在不同操作系统下,显示效果一致),此时我们就需要使用到 ...

  5. WPF学习之深入浅出话模板

    图形用户界面应用程序较之控制台界面应用程序最大的好处就是界面友好.数据显示直观.CUI程序中数据只能以文本的形式线性显示,GUI程序则允许数据以文本.列表.图形等多种形式立体显示. 用户体验在GUI程 ...

  6. WPF编程学习 —— 样式

    本文目录 1.引言 2.怎样使用样式? 3.内联样式 4.已命名样式 5.元素类型样式 6.编程控制样式 7.触发器 1.引言 样式(Style),主要是用来让元素或内容呈现一定外观的属性.WPF中的 ...

  7. Expression Blend实例中文教程(12) - 样式和模板快速入门Style,Template

    在上一篇,介绍了Visual State Manager视觉状态管理器,其中涉及到控件的样式(Style)和模板(Template),本篇将详细介绍样式(Style)和模板(Template)在Sil ...

  8. WPF XAML 资源样式模板属性存放位置

    WPF XAML 资源样式模板属性存放位置 原文:WPF XAML 资源样式模板属性存放位置 WPF的XAML 资源申明 类似HTML. 整体来说分3种 1.行类资源样式属性 1.1 行内属性 < ...

  9. WPF中的数据模板(DataTemplate)

    WPF中的数据模板(DataTemplate) 在WPF中我们可以为自己的数据定制显示方式,也就是说虽然某数据数据是一定 的,但我们可以做到让它的表现方式多种多样,比如一个时间,在以前我们一般使用一 ...

最新文章

  1. Windows下如何安装和使用git
  2. GitHub 项目 增加成员
  3. jQuery中的表单对象属性过滤选择器(四、八)::enabled、:disabled、:checked、:selected...
  4. 简单模拟实现简单的当登录延时的效果
  5. std::alloc具体细节
  6. Python字符串详解
  7. Oracle全文索引之二 创建
  8. JS、CSS合并带来的效率提升
  9. 了解 PerformancePoint 仪表板设计器
  10. 快手通过标签添加好友_快手开通直播权限添加垂直标签
  11. 微机原理及应用简答题复习
  12. PPT常见的几种排版技巧,你都掌握了吗?
  13. WIN11映射NAS网络驱动器提示 用户名和密码错误
  14. Awesomium(一)-- WebSnapshot
  15. photoshop 插件_Photoshop的柔光
  16. 189邮箱smpt服务器,189邮箱登录(常用邮箱客户端设置指南)
  17. Android Wi-Fi 2.4G及5G信道一览表
  18. MacOS Big Sur 11.2.3 (20D91) with Clover 5131 and OC 0.6.7 and PE 三EFI分区原版DMG黑苹果镜像
  19. 推荐系统系列之隐语义模型
  20. 嵌入式Linux入门-手把手教你初始化SDRAM(附代码)

热门文章

  1. log4j 日志配置
  2. ECMAScript 实现继承的几种方式
  3. uva11991 Easy Problem from Rujia Liu?
  4. 嵌入式linux的学习笔记-共享内存(六)
  5. 从数据库读写RadioButtonList选中的值
  6. WCF从理论到实践(14):WCF解决方案模板 (转)
  7. 第五课 机器学习中的特征工程
  8. JSP中使用iframe导致内层网页CSS失效问题的解决方案
  9. java 域的隐藏_Windows Server 2008R2\2012\2016使用域策略自定义隐藏指定驱动器
  10. bow 折叠键盘 linux,bow便携折叠蓝牙键盘体验