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 系列,该 ...
随机推荐
- 在jQuery代码中,实现转跳
隐藏转跳,浏览器不产生历史记录(replace).代码片段: window.location.replace("http://insus.cnblogs.com"); 当然我们还不 ...
- jQuery使用FormData上传文件
这段时间,一直练习在ASP.NET MVC程序中上传文件.静态,动态,单个或多文件上传. 在网上有看到网友提及使用FormData来上传,Insus.NET觉得是一个很不错的方式. 控制器中,创建两个 ...
- ASP.NET Core 开发-缓存(Caching)
ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件. 目前Caching 组件提供了三种存储方式. Memory Redis SqlServer 学 ...
- 使用exe4j打包Java程序
工具: exe4j软件(云盘存) 可以运行的Java程序的jar包 打开我们已经安装好的exe4j软件,首先看到的是一个欢迎界面,我们直接[next]就可以了: 2 在第二步中我们选择[JAR in ...
- Spring之AntPathMatcher
前言 AntPathMatcher是什么?主要用来解决什么问题? 背景:在做uri匹配规则发现这个类,根据源码对该类进行分析,它主要用来做类URLs字符串匹配: 效果 可以做URLs匹配,规则如下 ? ...
- tomcat 7下spring 4.x mvc集成websocket以及sockjs完全参考指南
之所以sockjs会存在,说得不好听点,就是因为微软是个流氓,现在使用windows 7的系统仍然有近半,而windows 7默认自带的是ie 8,有些会自动更新到ie 9,但是大部分非IT用户其实都 ...
- Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
Atitit.excel导出 功能解决方案 php java C#.net版总集合.docx 1.1. Excel的保存格式office2003 office2007/2010格式1 1.2. 类库选 ...
- javascript脚本设置输入框只读的问题
今天在开发中准备通过javascript设置input框只读属性的时候,用document.getElementById('input').readonly='readonly';结果发现这样设置无效 ...
- 为Apple Push开发的PHP PEAR 包:Services_Apple_PushNotification
Apple Push Notification Service:通过苹果服务器向app用户推送消息,无需启动app. 苹果官方文档:http://developer.apple.com/library ...
- Space.js – HTML 驱动的页面 3D 滚动效果
为了让我们的信息能够有效地沟通,我们需要创建用户和我们的媒体之间的强有力的联系.今天我们就来探讨在网络上呈现故事的新方法,并为此创造了一个开源和免费使用的 JavaScript 库称为 space.j ...