依赖属性:
  1. 节省实例对内存的开销;
  2. 属性值可以通过Binding依赖到其他对象上。
WPF中,依赖对象的概念被DependencyObject类实现,依赖属性被DependencyProperty类实现。
BindingOperations.SetBinding(stu,Student.NameProperty,binding);//绑定方式1
textBox1.SetBinding();//绑定方式2(FrameworkElement类才有的方法)
-------------------------------------------------------------------------------------------------
路由事件
Windows是消息驱动的操作系统,运行在上面的程序也遵循这个机制运行。
CLR事件模型:本质上是一个使用event修饰的委托实例;事件的拥有者就是事件的发送者(Sender)
this.myButton.Click = new EventHandler(this.myButton.Click);//CLR事件模型中确定订阅关系的代码。
WPF路由事件模型:路由事件的事件拥有者和事件响应者之间没有显式的订阅关系,事件的拥有者只负责激发事件,事件有谁响应他并不知道。事件的响应者则安装有事件检测器,针对某类事件进行监听。当然WPF仍然支持传统的直接事件模型。
调用源自UIElement类的AddHandler()方法,把监听的事件和事件的处理器关联起来:
this.gridRoot.AddHandler(Button.ClickEvent,new RoutedEventHandler(this.Button.Clicked));
 
RoutedEventArgs的Source和OriginalSource:
路由事件是沿着VisualTree传递的(而不是LogicalTree)
Source属性表示LogicalTree上消息的源头;(LogicalTree的叶子节点是构成用户界面的控件)
OriginalSource属性表示VisualTree上消息的源头;(VisualTree连控件中细微的结构也算上)
 
---------------------------------------------------------------------------------------------------
WPF命令
事件和命令的区别在于命令具有约束力,比如“保存”命令,可以控制事件处理程序的处理逻辑。
WPF命令系统的几个基本要素:
  1. 命令,实现IComamnd接口,或者直接是RoutedCommand类
  2. 命令源,实现IComamndSource接口,Button,MenuItem,ListBoxItem都实现了这个接口
  3. 命令目标,实现IInputCommand接口
  4. 命令关联,负责将一些外围的逻辑与命令关联起来,比如执行命令后还进行哪些后续操作。
-----------------------------------------------------------------------------------------------------
WPF资源
WPF不但支持程序级的传统资源,同时还推出独具特色的对象级资源,每个界面元素都可以携带自己的资源并可以被自己的子级元素共享。比如说模板,程序样式,主题就经常放在对象级资源中。
 
首先在XAML中添加名称空间引用:xmlns:sys="clr-namespace:System;assembly=mscorlib"
示例:
<Window x:Class="" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<Window.Resources>
<sys:String x:Key="str">
华中师范大学
</sys:String>
<sys:String x:Key="dbl">
3.1415926
</sys:String>
</Window.Resources>
<StackPanel>
<TextBlock Text="{StaticResource ResourceKey=str}">
</TextBlock>
</StackPanel>
</Windows>
 
  • 在C#代码中使用定义在XAML代码里的资源:
string text = (string)this.FindResource("str");
//string text =(string)this.Resources["str"];
this.textbox1.Text = text;
 
  • WPF中可将资源放在独立的资源中,供多个界面重用:
<Window.Resources>
<ResourceDictionary Source="ShineRed.xaml">
</ResourceDictionary>
</Window.Resources>
 
静态资源和动态资源:
StaticResource是指程序载入内存对资源的一次性使用,之后就不再去访问这个资源;
DynamicResource是指程序使用过程中还会使用的资源。
 
向WPF程序添加二进制资源(非WPF资源):
  1. 添加Resource.resx文件
  2. 添加xmlns:prop="clr-namespace:wpfapplication.Properties"
  3. <TextBlock Text="{x:Static prop:Resource.UserName}"></TextBlock>
-----------------------------------------------------------------------------------------------------------------
WPF模板
WPF中的模板分为两类:
  1. ControlTemplate(决定控件长什么样)
  2. DataTemplate(决定数据显示成什么样)
 
注册转换器:
public class AutoMakerToLogoPathConverter:IValueConverter
{
public object Convert()
{
return new BitmapImage(new Uri(uripath,UriKind.Relative))
}
public object ConvertBack()
{
throw new NotImplementedException();
}
}
 
把Convert以资源的形式放在字典里:
<Window.Resources>
<local:AutoMakerToLogoPathConverter x:Key="abc" />
<local:NameToPhotoPathConverter x:Key="n2p" />
</Window.Resources>
 
定义数据模板并使用转换器:
<DataTempalte x:Key="carDetailViewTemplate">
<Image Source="{Binding Name,Converter={StaticResource n2p}}";
</DataTempalte>
 
设置DataTemplate中的DataType属性(把数据模板应用到某个数据类型上):
<DataTemplate DataType="{x:Type local:Unit}">
 
依赖属性:一种可以自己没有值,通过使用Binding从数据源获得值的属性。拥有依赖属性的对象叫做依赖对象(Denpendency Object)。依赖属性可以节省实例对内存的开销。
为依赖属性添加了CLR属性包装后,其就具有了扮演数据源和数据目标的双重角色的能力。另外,尽管依赖属性所对应的依赖对象没有实现INotifyPropertyChanged接口,但是当属性发生改变时与之关联的Binding对象依然可以得到通知,依赖属性天生就是合格的数据源。
-------------------------------------------------------------------------------------------------------------------
附加属性:一个属性本来不属于某一个对象,但由于某种需求而后来被附加上。附加属性本质上是依赖属性。附加属性的作用是将属性与数据类型解耦,让数据类型的设计更加灵活。

 

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

  1. csapp读书笔记-并发编程

    这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...

  2. CSAPP 读书笔记 - 2.31练习题

    根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1)  属于第一种情况 sum = x ...

  3. CSAPP读书笔记--第八章 异常控制流

    第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...

  4. CSAPP 并发编程读书笔记

    CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...

  5. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  6. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  7. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  8. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  9. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  10. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. 浅谈Express的put与del

    假设有一个景区价格列表页,显示当前的价目表. 价目表存放在express应用的数组中: var tours = [ {id:0,name:'Hood River',price:99.99}, {id: ...

  2. iOS----线程之间的通信

    当线程的数量大于一个的时候,线程之间可能会产生通信,既一个线程产生的结果要被另一个线程用到. 比如常用的图片的加载就是这个样子.图片的加载是在子线程进行的,当图片加载完毕,就会回到主线程中刷新UI,展 ...

  3. 【bzoj3489】 A simple rmq problem k-d树

    由于某些原因,我先打了一个错误的树套树,后来打起了$k-d$.接着因不明原因在思路上被卡了很久,在今天中午蹲坑时恍然大悟...... 对于一个数字$a_i$,我们可以用一组三维坐标$(i,pre,nx ...

  4. Java多线程——死锁

    当一个线程永远地持有一个锁,并且其他线程都尝试获得这个锁时,那么他永远被阻塞,当线程A持有锁L并想获得锁M的同时,线程B持有锁M并同时尝试获得锁L时,那么两个线程将永远的等待下去,这中情况就是简单的死 ...

  5. linux解压.tar.xz压缩包

    今天,打算更新一下node版本(v6.11.1 -> v8.9.4),结果阿里云服务器使用nvm命令下载慢如牛,于是直接在node官网找到合适的v8.9.4压缩包下载到电脑里,然后up到阿里云服 ...

  6. 自学C Primer Plus时还没想明白的问题

    2016年11月24日 1. 计算机中两个浮点数怎样进行加法运算.2. 为什么计算机在计算时存在损失精度的可能3. 无符号数和有符号数的运算是怎样的4. printf中使用格式控制符的截断问题,比如% ...

  7. Nodejs学习笔记(十五)—Node.js + Koa2 构建网站简单示例

    前言 前面一有写到一篇Node.js+Express构建网站简单示例:http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp.html 这篇还 ...

  8. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  9. 小白学习之Code First(三)

    上下文Context类中的base构造器的几个方法重置(1.无参 2.database name 3 . 连接字符串) 无参:如果基类base方法中无参,code first将会以 :{Namespa ...

  10. [日常] Apache Order Deny,Allow的用法

    Order Deny,Allow的用法:影响最终判断结果的只有两点:1. order语句中allow.deny的先后顺序,最后的是最优先的:2. allow.deny语句中各自包含的范围. 常用:Or ...