1、WPF资源分布:数据库、资源文件、WPF对象资源、变量
2、每个WPF的界面都具有一个名为Resources的属性,其类型为ResourceDictionary,以键值对的形式存储资源。
3、检索资源时,控件先查找自己的Resources属性,如果没有,程序会沿LogicalTree向上一级控件查找。如果最顶层容器也没有,就会查找Application.Resources。
4、在C#代码中使用定义在XAML代码里的资源:

string text=(string)this.FindResource("str");

如果明确知道资源存在:

string text=(string)this.Resources["str"];

5、使用XAML资源文件添加程序皮肤
把相应的XAML文件添加进项目中,然后用Source属性进行引用。

<Window.Resources>
<ResourceDictionary Source="ShinyRed.xaml"/>
</Window.Resources>

6、静态资源与动态资源
静态资源:程序载入内存时对资源的一次性使用,之后不再访问该资源。也就是说初始化之后不再改变。
动态资源:程序运行过程中仍然会访问该资源。也就是说程序运行过程中资源可能会改变。
举例:如果程序运行过程中允许用户更改程序皮肤的配色方案,则用动态资源,否则用静态资源。
7、对象资源与二进制资源
对象资源:ResourceDictionary中的资源
二进制资源:应用程序的内嵌资源(图标、图片、文本、音频、视频等等)
8、向程序添加二进制资源
(1)添加的资源为字符串
在项目管理器中展开Properties结点,双击Resources.resx。编译后,可以使用Properties命名空间中的Resources类的方法或属性去获取该文件中的资源。
把Resources.resx的访问级别有Internal改为Public,这样XAML编译器才能访问这个类。
在XAML使用Resources.resx中的资源。
先把Properties中的名称空间映射为XAML名称空间

xmlns:prop="clr-namespace:DisplayWatch.Properties"

然后用x:Static标签扩展来访问资源:

<TextBlock Text="{x:Static prop:Resources.UserName}"/>

在C#中使用资源

this.textBlock.Text=Properties.Resources.Password;

(2)添加的资源是图标、图片、音频或视频等
在项目管理器的适当文件夹中右键:Add-->ExistingItems。
如果想让外部文件编译成二进制资源,则把BuildAction属性值设为Resources,Copy to Output Dictionary设为Do Not Copy。否则,把BuildAction属性值设为None,Copy to Output Dictionary设为CopyAlways。
9、使用Pack URI访问二进制资源
使用相对路径

<Image x:Name="ImagBg" Source="Resources/Image/Rafale.jpg" Stretch="Fill"/>

this.ImagBg.Source=new BitmapImage(new Uri(@"Resources/Image/Rafale.jpg",UriKind.Relative));

使用绝对路径

<Image x:Name="ImagBg" Source="pack://application:,,,/Resources/Image/Rafale.jpg" Stretch="Fill"/>

this.ImagBg.Source=new BitmapImage(new Uri(@"pack://application:,,,/Resources/Image/Rafale.jpg",UriKind.Absolute));

10、控件的内容
算法:控件的功能(响应的操作、激发的事件等)
数据:控件要展示的具体数据
11、WPF中的Template
ControlTemplate:算法内容的表现形式
DataTemplate:数据内容的表现形式
12、使用DataTemplate代替UserControl,使用数据驱动代替事件驱动
(1)创建数据模型

public class Car
{
public string Automaker { get; set; }
public string Name { get; set; }
public string Year { get; set; }
public string TopSpeed { get; set; }
}

(2)在Window.Resources中添加DataTemplate资源

<Window.Resources>
<DataTemplate x:Key="listTemplate">
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="6">
<StackPanel Margin="5" >
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="Name:"/>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="Year:"/>
<TextBlock Text="{Binding Year}"/>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
<DataTemplate x:Key="detailTemplate">
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="6">
<StackPanel Margin="5" >
<StackPanel Margin="5">
<TextBlock Text="Name:"/>
<TextBlock Text="{Binding Name}"/>
<TextBlock Text="AutoMaker:"/>
<TextBlock Text="{Binding Automaker}"/>
<TextBlock Text="Year:"/>
<TextBlock Text="{Binding Year}"/>
<TextBlock Text="Top Speed:"/>
<TextBlock Text="{Binding TopSpeed}"/>
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
</Window.Resources>

(3)对控件进行布局,并使用DataTemplate

<StackPanel Orientation="Horizontal" Margin="5">
<UserControl ContentTemplate="{StaticResource detailTemplate}"
Content="{Binding SelectedItem,ElementName=listBoxCars}"/>
<ListBox x:Name="listBoxCars" Width="300" Margin="5,0" ItemTemplate="{StaticResource listTemplate}"/>
</StackPanel>

(4)在C#代码中添加数据资源

           List<Car> carlist = new List<Car>()
{
new Car(){Automaker="Lamboghini",Name="Diabo",Year="",TopSpeed=""},
new Car(){Automaker="Lamboghini",Name="Murcielago",Year="",TopSpeed=""},
new Car(){Automaker="Lamboghini",Name="Gallardo",Year="",TopSpeed=""},
new Car(){Automaker="Lamboghini",Name="Reventon",Year="",TopSpeed=""}, };
this.listBoxCars.ItemsSource = carlist;

13、使用ControlTemplate改变控件的外观
(1)编辑某个控件的ControlTemplate(如TextBox)
首先,在界面中放入一个TextBox,然后选中,右键选择EditTemplate->Edit a copy,输入Style Key,选择资源保存的位置(如Application),确定。就会在XAML的Resources标签中出现控件的原始Style,ControlTempla
te就在里面,按照自己的要求对其修改即可。
(2)ItemsControl的PanelTemplate
比如将ListBox变为水平方向显示

        <ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

14、DataTemplate和ControlTemplate的关系
ControlTemplate决定控件外观,对应Template属性
DataTemplate决定数据外观,对应ContentTemplate属性
DataTempate控件树是ControlTemplate控件树的子树
15、DataTemplate和ControlTemplate的应用
(1)把ControlTemplate应用在所有目标上
设置Style的TargetType

<Style TargetType="{x:Type TextVox}">

如果个别目标不需要应用该Style,则将该控件的Style标记为{x:Null}

<TextBox Style="{x:Null}"/>

(2)把DataTemplate应用在某个数据类型上
设置DataTemplate的DataType属性

<DataTemplate DataType="{x:Type local:Car}">
</DataTemplate>

(3)将XML文件中的数据应用到DataTemplate中
数据绑定时,使用XPath指定相应的结点作为Binding中的Path。
15、显示层级数据
使用HierarchicalDataTemplate。

     <Window.Resources>
<XmlDataProvider x:Key="ds" Source="Data.xml" XPath="Data/Grade"/>
<HierarchicalDataTemplate DataType="Grade" ItemsSource="{Binding XPath=Grade}">
<TextBlock Text="{Binding XPath=@Name}"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Class" ItemsSource="{Binding XPath=Class}">
<RadioButton Content="{Binding XPath=@Name}" GroupName="gn"/>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Group" ItemsSource="{Binding XPath=Group}">
<CheckBox Content="{Binding XPath=@Name}"/>
</HierarchicalDataTemplate>
</Window.Resources>
<Grid>
<TreeView ItemsSource="{Binding Source={StaticResource ds}}"/>
</Grid>

16、使用DataTemplate来定制GridViewColumn的CellTemplate
注意,改变CellTemplate后,可能需要处理焦点问题。(比如TextBox和ListItem的关系)
17、Style中的两种重要属性:Setter和Trigger
18、Trigger的分类
Trigger 普通触发
MultiTrigger 多条件触发
DataTrigger 数据触发
MultiDataTrigger 多数据条件触发
EventTrigger 事件触发。多用来执行一段动画。

关于绘图和动画

1、WPF绘图,常用的绘图容器:Canvas和Grid
2、WPF绘图元素
Line直线
Rectangle矩形
Ellipse椭圆
Path路径(最强大)
3、使用Path裁剪界面元素
使用窗体或控件的Clip界面属性
4、效果 Effect
BlurEffect 模糊效果
DropShadowEffect 投影效果
ShaderEffect 着色器效果(抽象),用于开发滤镜插件
从http://wpffx.codeplex.com可以下载官方的滤镜压缩包。
5、Transform
(1)RenderTransform:呈现变形
只改变元素“出现在哪里”,不牵扯布局的改变,只涉及窗体的重绘。用于制作动画的时候提高效率。
(2)LayoutTransform:布局变形
会影响窗体的布局。一般只用在静态变形上,不用于制作动画。
6、关键帧动画:方便协同多个动画,串行执行的一组动画
7、场景Storyboard:并行执行的一组动画

《深入浅出WPF》笔记四的更多相关文章

  1. 深入浅出WPF笔记

    数据层(Database,Oracle等) 业务逻辑层(Service,Data Access Layer,WCF) 表示层(WPF,Win Form,ASP.net,Silverlight) [WP ...

  2. 《深入浅出WPF》笔记——绘画与动画

    <深入浅出WPF>笔记——绘画与动画   本篇将记录一下如何在WPF中绘画和设计动画,这方面一直都不是VS的强项,然而它有一套利器Blend:这方面也不是我的优势,幸好我有博客园,能记录一 ...

  3. 《深入浅出WPF》笔记——事件篇

    如果对事件一点都不了解或者是模棱两可的话,建议先去看张子阳的委托与事件的文章(比较长,或许看完了,也忘记看这一篇了,没事,我会原谅你的)http://www.cnblogs.com/JimmyZhan ...

  4. 《深入浅出WPF》笔记——资源篇

    原文:<深入浅出WPF>笔记--资源篇 前面的记录有的地方已经用到了资源,本文就来详细的记录一下WPF中的资源.我们平时的“资源”一词是指“资财之源”,是创造人类社会财富的源泉.在计算机程 ...

  5. 《深入浅出WPF》笔记——模板篇

    原文:<深入浅出WPF>笔记--模板篇 我们通常说的模板是用来参照的,同样在WPF中,模板是用来作为制作控件的参照. 一.认识模板 1.1WPF菜鸟看模板 前面的记录有提过,控件主要是算法 ...

  6. 《深入浅出WPF》 学习笔记

    <深入浅出WPF> 序言 1. 什么是WPF    2. 为什么要学习WPF 第一章 XAML概览 1. XAML是什么? 2. XAML有哪些优点 第二章 从零起步认识XAML 1. 新 ...

  7. 《深入浅出WPF》重点摘要(—)Binding自动通知机制

    最近因为公司的项目需要用WPF开发,就学习了一下WPF.刚开始只是用到什么就百度什么,虽然功能是实现了,但还是没有弄清楚原理(如果不弄清原理,会感觉很心虚,整个人会没底气),所以决定找个教程系统地学一 ...

  8. WPF笔记(2.6 ViewBox)——Layout

    原文:WPF笔记(2.6 ViewBox)--Layout 在Canvas外面包一层ViewBox,可以使Canvas内的控件填充整个ViewBox,并随着ViewBox的大小变化而同步变化,这是因为 ...

  9. WPF笔记(2.4 Grid)——Layout

    原文:WPF笔记(2.4 Grid)--Layout 第一章已经简单介绍过这个容器,这一节详细介绍.Grid一般是用表格(Grid.Row 和Grid.Column )的,比StackPanel更细致 ...

  10. WPF笔记(1.10 绘图)——Hello,WPF!

    原文:WPF笔记(1.10 绘图)--Hello,WPF! 书中的代码语法过时了,改写为以下(测试通过):         <Button>            <Button.L ...

随机推荐

  1. AngularJs $anchorScroll、$controller、$document

    $anchorScroll 根据HTML5的规则,当调用这个函数时,它检查当前的url的hash值并且滚动到相应的元素. 监听$location.hash()并且滚动到url指定的锚点的地方.可以通过 ...

  2. Mac xcode 编译产生app的路径

    .../<current User>/Library/Developer/XCode/DerivedData/<Project name>-<other characte ...

  3. 【原】javascript执行环境及作用域

    最近在重读<javascript高级程序设计3>,觉得应该写一些博客记录一下学习的一些知识,不然都忘光啦.今天要总结的是js执行环境和作用域. 首先来说一下执行环境 一.执行环境 书上概念 ...

  4. Sublime Text 3 快捷键整理

    选择类Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本.Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.Ctrl+L 选中整行,继续操作则继续选择下一行, ...

  5. C#读写文本和连接数据库

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. js切换实现背景颜色

    <script type="text/javascript"> obj=document.getElementsByTagName('h1'); ;i<obj.l ...

  7. Linux下显示IP地理位置信息的小工具-nali

    一.简介 nali,名字取自中文“哪里”的拼音.nali包含一组命令行程序,其主要功能就是把一些网络工具的输出的IP字符串,附加上地理位置信息(使用纯真数据库QQWry.Dat).例如74.125.1 ...

  8. Java排序算法——冒泡排序

    import java.util.Arrays; //================================================= // File Name : Bubble_S ...

  9. flask安装及第一个程序

    1.flask是一个轻量级的python web框架 ·1.Flask 依赖两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 套件 ·2.安装: # easy_install fla ...

  10. yum配置文件详解

    yum是什么: Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包,自动解决包的倚赖性问题,它能便于管理大量系统的更新问题. yum特点:可以同时配置多 ...