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="1990",TopSpeed="340"},new Car(){Automaker="Lamboghini",Name="Murcielago",Year="2001",TopSpeed="353"},new Car(){Automaker="Lamboghini",Name="Gallardo",Year="2003",TopSpeed="325"},new Car(){Automaker="Lamboghini",Name="Reventon",Year="2008",TopSpeed="356"},};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:并行执行的一组动画

转载于:https://www.cnblogs.com/tt2015-sz/p/4818180.html

《深入浅出WPF》笔记四相关推荐

  1. Python灰帽子笔记一

    动态链接库本身是一些经过编译的二进制文件,之在运行时才会被连接进主进程.在windows下这些二进制文件被称为动态链接库(dll),而在linux下这些库文件被称为共享对象(so,shared obj ...

  2. Python灰帽子笔记二

    通用寄存器: 寄存器可以被认为是位于CPU上的小型存储器.CPU获取数据的最快方式是直接访问寄存器.在X86指令集中,一个CPU具有8个通用寄存器:EAX,EDX,ECX,ESI,EDI,EBP,ES ...

  3. Python灰帽子--黑客与逆向工程师的Python编程之道 笔记,过程问题解决

    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑电脑端的可以看看目录 跟着学习进度不断更新中....(因为懒,没更新了,也不打算继续更新文章了......) power by <p ...

  4. 读书笔记 《Python灰帽子-黑客与逆向工程师的Python编程之道》

    Python灰帽子-黑客与逆向工程师的Python编程之道 1.调试器原理和设计 调试器 白盒调试器 黑盒调试器 2.寄存器 2.1通用寄存器 EAX(ADD) EDX(DEPOSIT) ECX(Co ...

  5. 电子书推荐--《Python灰帽子》,python黑客编程

    点此在线阅读 <Python灰帽子>是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍 ...

  6. Python灰帽子环境配置

    关于Python灰帽子里面的python代码运行环境配置,需要安装python2.7.x,自行到http://www.python.org下载. 我配置好环境后,把用到的库和pydbg需要替换的文件, ...

  7. Python灰帽子pdf

    下载地址:网盘下载 内容简介  · · · · · · <Python灰帽子>是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Pytho ...

  8. Python灰帽子——黑客与逆向工程师的Python编程之道

    Python灰帽子--黑客与逆向工程师的Python编程之道 下载地址 https://pan.baidu.com/s/12hlf8ZAXBbGwcael_Ecmrg 扫码下面二维码关注公众号回复 1 ...

  9. python灰帽子学习感想

    Gray Hat Python Python Programming for hackers and reverse engineers Python灰帽子:黑客与逆向project师的Python编 ...

  10. Python灰帽子_黑客与逆向工程师的Python编程之道

    收藏自用 链接:Python灰帽子_黑客与逆向工程师的Python编程之道

最新文章

  1. GPB|农业生产活动对水体微生态的重要影响(一作解读)
  2. Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
  3. PHPstorm配置同步服务器文件
  4. 推荐:Dapper扩展-Dapper.SimpleCRUD
  5. 游戏引擎开发和物理引擎_视频游戏开发的最佳游戏引擎
  6. Hashtable、HashMap、TreeMap总结
  7. java大作业私人管家系统_重庆管家婆软件丨管家婆工贸PRO的E-MES管理详解
  8. gdiplus拼接两张图片_深色模式下的图片变暗问题,解决了!
  9. SpringMVC jsp界面值渲染不出来
  10. 高阶函数-sort()与sorted() (三分钟读懂)
  11. Linux命令行常用小结
  12. vivado DEBUG使用说明
  13. java如何动态添加数组数据_Java动态数组添加数据的方法与应用示例
  14. php命令行生成文件,php命令行生成与读取配置文件
  15. 安装protobuf可能遇到的问题
  16. 《正在爆发的互联网革命》作者个人出资10000美金,面向全球征召六度分割理论实验对象!...
  17. 吴恩达deeplearning之CNN—卷积神经网络入门
  18. vivado里那些看不懂的原语
  19. 基于[Python]的ATM取款机模拟实战
  20. java 银联接口_银联支付接口整合开发(java)

热门文章

  1. java合并排序_Java中的合并排序算法
  2. 2021软考报名开始!(附官网报名入口)
  3. html注入 绕过域名检查,微信域名拦截查询网页源码——一个非常实用的微信域名检测工具实现...
  4. 伽马函数及其推导过程
  5. LDA计算 perplexity(困惑度)确定主题个数(代码)
  6. 怎么样才能成为数据分析师?
  7. 苏宁易购有哪些接口?
  8. 亚马逊备案或授权出现品牌滥用怎么办?现在的通过率很高么?
  9. 前端开发学习路线和知识点记录
  10. Chrome 您的连接不是私密连接 解决办法