样式

实例:

<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. 求SQL语句递归的算法

    表结构是这样的 部门    上级部门    A           BB           CC           DA           AB           BC           C ...

  2. 【阿炬Android笔记】01、调用VitamioBundle播放窗口

    1.调用VitamioBundle播放窗口 Intent intent = new Intent(getApplicationContext(), VideoActivity.class); inte ...

  3. CodeSnippet.info 开源说明 和 环境搭建 (第一版)

    Github开源声明 本网站的代码开源,开源的目的如下 技术分享 希望业内同行贡献代码 希望能够让网站更加安全 开源地址: CodeSnippet开源地址 关于代码贡献 任何人都可以贡献代码,一般在 ...

  4. 如何显示二进制流的图片(利用img控件)

    之前在http://www.cnblogs.com/JsonZhangAA/p/5568575.html博文中是利用的image控件来显示的二进制流图片,我现在想的是能 通过普通的<img id ...

  5. MySQL的Incorrect string value错误

    用以下SQL语句向表2中插入数据: insert into 表2 select * from 表1 结果出现Incorrect string value错误: 打开表2一看,里面全是问号: 后来才发现 ...

  6. iOS取得AddressBook联系人信息

    新建一个CContact类用于存放联系人信息,下面是该类的代码: CContact.h代码: 01 #import <Foundation/Foundation.h> 02   03   ...

  7. [moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)

    一.在标签tags的model中 //使用正则表达式,把标签字符串转换成数组 public static function string2array($tags) { return preg_spli ...

  8. Java集合源码分析(四)Vector<E>

    Vector<E>简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长. Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是 ...

  9. 【FOL】第九周

    不知不觉又是三周过去了. 这几周忙了一下,其他时间全都在搞服务端,简直是酸爽的不行...不过还好出了些成果. 目前服务端有: 1.版本服务:游戏版本更新 2.账号服务:用户身份验证,返回各种连接(代理 ...

  10. Guava学习笔记:Guava新集合-Table等

    Table 当我们需要多个索引的数据结构的时候,通常情况下,我们只能用这种丑陋的Map<FirstName, Map<LastName, Person>>来实现.为此Guava ...