样式

实例:

<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. 基于MVC4+EasyUI的Web开发框架经验总结(11)--使用Bundles处理简化页面代码

    在Web开发的时候,我们很多时候,需要引用很多CSS文件.JS文件,随着使用更多的插件或者独立样式文件,可能我们的Web界面代码会越来越臃肿,看起来也很累赘,在MVC里面提供了一个Bundle的对象, ...

  2. 用纯css画个三角形

    用纯css画个三角形以下是源代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " ...

  3. 这几天做完简易酒店管理系统,对Sql Server执行计划的浅显了解。

    我是一名大三的小学生,今天开始我的第一篇博客,最近随便做了一个简易的酒店管理系统,对sql执行计划有了初步的了解. 查看上面语句的预估执行计划,在工具栏中有这个按钮 聚集索引扫描被称为Index Sc ...

  4. C# Graphics绘图 picBox

    需求: Bitmap bm = new Bitmap(picboxPreview.Width, picboxPreview.Height); using (Graphics g = Graphics. ...

  5. C# 操作鼠标移动到指定的屏幕位置方法

    /// <summary> /// 引用user32.dll动态链接库(windows api), /// 使用库中定义 API:SetCursorPos /// </summary ...

  6. C#网站发布在IIS10上,Access数据库读取为空白的解决方案

    打开IIS10,进入应用程序池,右边“设置应用程序池默认设置”中,启用32位应用程序,False改为True即可.

  7. objective-c UITableview 自定义滑操(原创)

    滑动删除在当前的ios版本中已经支持了,但是遇到复杂的比如,滑动后的功能有多个,并不是删除功能,那么你就得自己写,我说得没错吧.......... 其实关于滑删嘛,在以前的项目中也遇到过,当时ios还 ...

  8. Scalaz(39)- Free :a real monadic program

    一直感觉FP比较虚,可能太多学术性的东西,不知道如何把这些由数学理论在背后支持的一套全新数据类型和数据结构在现实开发中加以使用.直到Free Monad,才真正感觉能用FP方式进行编程了.在前面我们已 ...

  9. genymotion和eclipse连接问题,一直出错

    前两天重装系统,但是在运行android代码的时候遇到了这样的问题 The connection to adb is down,and a server error has occured. You ...

  10. Nginx学习随笔

    题外话 第一份工作中项目中有DBA和运维,所以平时也只关注开发部分,对数据库和服务器关注比较少,记得那时有用户反馈网站很慢,老大让我联系运维看看是不是服务器的问题,那时也不知道Nginx是个什么东西. ...