样式

实例:

<Window.Resources>
<Style x:Key="BtnStyle">
<Setter Property="Button.Height" Value="" />
<Setter Property="Button.Margin" Value="" />
<Setter Property="Button.Background" Value="Beige" />
<Setter Property="Button.RenderTransform">
<Setter.Value>
<RotateTransform Angle="" />
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<WrapPanel x:Name="wrappanel" Margin="">
<Button Content="btn1" Style="{StaticResource BtnStyle}" />
<Button Content="btn2" Style="{StaticResource BtnStyle}" />
<Button Content="btn3" Style="{StaticResource BtnStyle}" />
</WrapPanel>

如果不设置样式,需要每个控件都添加重复的代码,比较繁琐。

可以设置Style的TargetType,并且可以不设置x:Key,会默认应用到符合的控件上,需要注意Scope,在定义的Scope内才会生效

<Style TargetType="{x:Type Button}">
<Setter Property="Height" Value="" />
<Setter Property="Margin" Value="" />
<Setter Property="Background" Value="Beige" />
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="" />
</Setter.Value>
</Setter>
</Style>
 <Button Content="btn1" />

样式具有继承机制

如果有不同类型的空间,希望共用一部分样式设置,可以通过BasedOn实现

<Window.Resources>
<Style TargetType="{x:Type Control}">
...
</Style>
<Style BasedOn="{StaticResource {x:Type Control}}" TargetType="{x:Type Button}">
...
</Style>
<Style BasedOn="{StaticResource {x:Type Control}}" TargetType="{x:Type RadioButton}">
...
</Style>
</Window.Resources>

触发器

Style有一个Trigger集合,下面的例子是一个属性触发器

 <Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Red"></Setter>
</Trigger>
</Style.Triggers>

WPF有3中触发器

属性触发器,属性改变时执行触发器中的Setter集合

数据触发器,.net属性,不只依赖属性改变

事件触发器,触发路由事件时执行

实现一个ListBox

<Page.Resources>
<XmlDataProvider x:Key="InventoryData" XPath="Inventory/Book">
<x:XData>
<Inventory xmlns="">
<Book>
<Chapter Number="">
<Title>Chapter A</Title>
</Chapter>
<Chapter Number="">
<Title>Chapter B</Title>
</Chapter>
<Chapter Number="">
<Title>Chapter C</Title>
</Chapter>
<Chapter Number="">
<Title>Chapter D</Title>
</Chapter>
<Chapter Number="">
<Title>Chapter E</Title>
</Chapter>
</Book>
</Inventory>
</x:XData>
</XmlDataProvider>
</Page.Resources>
<StackPanel Margin="">
<ListBox HorizontalAlignment="Center" Padding="">
<ListBox.ItemsSource>
<Binding Source="{StaticResource InventoryData}" XPath="*" />
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock FontSize="" Margin="">
<TextBlock.Text>
<Binding XPath="Title" />
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>

为ListBox添加一个从透明到清晰的动画,通过事件触发器实现

<ListBox.Triggers>
<EventTrigger RoutedEvent="ListBox.Loaded">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="" To="" Duration="0:0:5" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ListBox.Triggers>

根据Number属性设置颜色

<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="Margin" Value="" />
<Setter Property="Padding" Value="" />
<Style.Triggers>
<DataTrigger Binding="{Binding XPath=@Number}" Value="">
<Setter Property="TextBlock.Foreground" Value="Red" />
</DataTrigger>
<DataTrigger Binding="{Binding XPath=@Number}" Value="">
<Setter Property="TextBlock.Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>

To be continue...

WPF学习之路(十四)样式和模板的更多相关文章

  1. 【WPF学习】第十四章 事件路由

    由上一章可知,WPF中的许多控件都是内容控件,而内容控件可包含任何类型以及大量的嵌套内容.例如,可构建包含图形的按钮,创建混合了文本和图片内容的标签,或者为了实现滚动或折叠的显示效果而在特定容器中放置 ...

  2. WPF学习之路(四)路由

    路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...

  3. 学习之路十四:客户端调用WCF服务的几种方法小议

    最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...

  4. 【WPF学习】第二十四章 基于范围的控件

    WPF提供了三个使用范围概念的控件.这些控件使用在特定最小值和最大值之间的数值.这些控件——ScrollBar.ProgressBar以及Slider——都继承自RangeBase类(该类又继承自Co ...

  5. 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞

    目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i )  定义原子变量v并初始化为i atomic_read(v)        返回原子变量 ...

  6. zigbee学习之路(十四):基于协议栈的无线数据传输

    一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...

  7. IOS学习之路十四(用TableView做的新闻客户端展示页面)

    最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...

  8. C++学习笔记(十四):模板

    模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版.Java中对应的技术称为泛型. 函数模板 ...

  9. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  10. Linux学习总结(十四)—— 查看CPU信息

    文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...

随机推荐

  1. ASP.NET MVC程序中动态修改form的Action值

    在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...

  2. 孙鑫MFC学习笔记19:动态链接库

    1.动态链接库 2.静态库和动态库 3.使用动态链接库的好处 4.动态链接库编译需要导出,使用需要导入 __declspec(dllexport),__declspec(dllimport) 5.动态 ...

  3. Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信

    这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...

  4. Java基础复习笔记系列 五 常用类

    Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...

  5. R语言XML格式数据导入与处理

    数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...

  6. sql server和mysql中分别实现分页功能

    MySQL 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录, 例如: select * from tablename limit m, n sql="select * ...

  7. java.io.StreamCorruptedException: invalid type code: AC错误的解决方法

    问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流 ...

  8. 今天做项目用到框架,关于angual,然后自己整理了一番,自己上网也看了看。

    1. Angular 1.1. 库与框架的区别 jQuery:库 库一般都是封装了一些常用的方法 自己手动去调用这些方法,来完成我们的功能 $('#txt').val('我是小明'): $('div' ...

  9. BookBlock - 效果非常真实的书本翻页预览

    这个名为 BookBlock 的图片预览效果是一个书展示或网上书店的概念,已全屏打开3D页面导航网格的形式显示图书的详细信息.我们可以打开书预览的摘录,其中有一些细节的网格.对于图书预览,我们在使用 ...

  10. 【初探HTML本相】道之真谛不过自然,html标签脱俗还真

    前言 须弥般若有无空,阴阳道化真虚同:洗尽前恩本非相,还吾面目下九重. 咳咳,其实老夫对佛教文化有点点研究啦,说以我们这里来了一点很有哲理的东西,因为我这里准备干一件很戳的事情,我准备来看看我们的ht ...