WPF学习之路(十四)样式和模板
样式
实例:
<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学习之路(十四)样式和模板的更多相关文章
- 【WPF学习】第十四章 事件路由
由上一章可知,WPF中的许多控件都是内容控件,而内容控件可包含任何类型以及大量的嵌套内容.例如,可构建包含图形的按钮,创建混合了文本和图片内容的标签,或者为了实现滚动或折叠的显示效果而在特定容器中放置 ...
- WPF学习之路(四)路由
路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供 ...
- 学习之路十四:客户端调用WCF服务的几种方法小议
最近项目中接触了一点WCF的知识,也就是怎么调用WCF服务,上网查了一些资料,很快就搞出来,可是不符合头的要求,主要有以下几个方面: ①WCF的地址会变动,地址虽变,但是里面的逻辑不变! ②不要引用W ...
- 【WPF学习】第二十四章 基于范围的控件
WPF提供了三个使用范围概念的控件.这些控件使用在特定最小值和最大值之间的数值.这些控件——ScrollBar.ProgressBar以及Slider——都继承自RangeBase类(该类又继承自Co ...
- 嵌入式Linux驱动学习之路(十四)按键驱动-同步、互斥、阻塞
目的:同一个时刻,只能有一个应用程序打开我们的驱动程序. ①原子操作: v = ATOMIC_INIT( i ) 定义原子变量v并初始化为i atomic_read(v) 返回原子变量 ...
- zigbee学习之路(十四):基于协议栈的无线数据传输
一.前言 上次实验,我们介绍了zigbee原理的应用与使用,进行了基于zigbee的串口发送协议,但是上个实验并没有实现数据的收发.在这个实验中,我们要进行zigbee的接受和发送实验. 二.实验功能 ...
- IOS学习之路十四(用TableView做的新闻客户端展示页面)
最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...
- C++学习笔记(十四):模板
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性.模版可以分为两类,一个是函数模版,另外一个是类模版.Java中对应的技术称为泛型. 函数模板 ...
- WPF学习之路初识
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
- Linux学习总结(十四)—— 查看CPU信息
文章首发于[博客园-陈树义],点击跳转到原文Linux学习总结(十四)-- 查看CPU信息. Linux学习总结(十四)-- 查看CPU信息 商用服务器CPU最常用的是 Intel Xeon 系列,该 ...
随机推荐
- ASP.NET MVC程序中动态修改form的Action值
在练习ASP.NET MVC时,为了实现一个小功能,POST数据至服务器执行时,需要动态修改form的action值. 下面Insus.NET列举一个例子来演示它.让它简单,明白易了解. 你可以在控制 ...
- 孙鑫MFC学习笔记19:动态链接库
1.动态链接库 2.静态库和动态库 3.使用动态链接库的好处 4.动态链接库编译需要导出,使用需要导入 __declspec(dllexport),__declspec(dllimport) 5.动态 ...
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- R语言XML格式数据导入与处理
数据解析 XML是一种可扩展标记语言,它被设计用来传输和存储数据.XML是各种应用程序之间进行数据传输的最常用的工具.它与Access,Oracle和SQL Server等数据库不同,数据库提供了更强 ...
- sql server和mysql中分别实现分页功能
MySQL 在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录, 例如: select * from tablename limit m, n sql="select * ...
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
问题描述: 在向一个文件写入可序列化对象时,每次只想向文件的末尾添加一个可序列化的对象,于是使用了FileOutputStream(文件名,true)间接的构建了ObjectOutputStream流 ...
- 今天做项目用到框架,关于angual,然后自己整理了一番,自己上网也看了看。
1. Angular 1.1. 库与框架的区别 jQuery:库 库一般都是封装了一些常用的方法 自己手动去调用这些方法,来完成我们的功能 $('#txt').val('我是小明'): $('div' ...
- BookBlock - 效果非常真实的书本翻页预览
这个名为 BookBlock 的图片预览效果是一个书展示或网上书店的概念,已全屏打开3D页面导航网格的形式显示图书的详细信息.我们可以打开书预览的摘录,其中有一些细节的网格.对于图书预览,我们在使用 ...
- 【初探HTML本相】道之真谛不过自然,html标签脱俗还真
前言 须弥般若有无空,阴阳道化真虚同:洗尽前恩本非相,还吾面目下九重. 咳咳,其实老夫对佛教文化有点点研究啦,说以我们这里来了一点很有哲理的东西,因为我这里准备干一件很戳的事情,我准备来看看我们的ht ...