最近学习win8开发,偶然发现同事桌上一本《深入浅出WPF》就随手翻看了几页,发现此书非一般,全是讲的WPF的实现原理,

给我这个学习Silverlight半知半解的人来说,看了之后豁然开朗。真是相见恨晚呀!对于正在学习Windows Phone和Win8开发的同伴来说 这绝对是本难得的好书。

现在就把个人在学习这本书所做的笔记总结拿出来和大家分享下 与大家一同交流学习。

 

第一章 XAML 概览
1、事件驱动模型:界面操作触发一个事件,然后在事件处理器(函数或方法)中处理数据和调用别的方法,(界面通过事件控制数据)。
      数据驱动模型:当数据发生变化的时候主动去通知界面,告知界面重新展示数据,界面控件对数据的修改直接送达数据,(数据通过Data Binding控制界面)。
 

第二章 从零起步认识XAML

  1、在XAML中引入命名空间 
       a、xmlns[:可选的映射前缀]="clr-namespace:命名空间;assembly=程序集(类似在后台代码中添加引用dll)"(如果没有添加映射前最 就是默认命名空间只能有一个) 
       b、在每一个XAML文件上面的程序及引入命名空间中可以看到一些URL,它们不是URL,它们是XAML硬性规定的编码,当XAML的编码解析器看到这些固定的字符串的
             时候,会自动将一系列的必要程序集(assembly)和命名空间(clr-namespace)引入进来。
 
第三章 系统学习XAML语法
   1、WPF的类库中提供了VisualTreeHelper和LogicalTreeHelper来对XAML树形结构访问查找元素、获取父子节点等
   2、TypeConverter在一些赋值转换中使用,
   3、XAML是一种声明式的语言,XAML编译器为每一个标签创建一个与之对应的一个对象。XAML为对象属性赋值有两种方法:
         a、直接在标签内容中使用字符串赋值(内置转换器进行转换,不能实现的使用TypeConverter)
         b、使用属性元素进行复杂赋值,
   4、属性元素:某个标签的一个元素对应这个标签的一个属性,即以元素的形式来表达一个实例的属性
         <TextBox FontSize=20>
            <TextBox.Text>
               这样子写就是属性元素的写法
            </TextBox.Text>
         </TextBox >
   5、标记扩展:一种特殊的Attribute=value的语法,特殊的是value用一对{}包含
         Text={Binding Path=value,ElementName=slider1}  (类似C# 3.0里面的对象初始化语法)
        a、标记扩展也是对属性的赋值所以可以与属性元素相互转换
        b、只有MarkupExtention类的派生类才能使用标记扩展来创建对象
        c、标记扩展可以嵌套
             Text={Binding Sourse={StaticResource myDataSourse},Path=PersonName}
        d、标记扩展有一些简写语法
             {Binding Value,...}与{Binding Path=Value,...}; {StaticResource myString,...}与{StaticResource ResourceKey=myString,...}
              上面两组的效果都是一样的,两组前面的写法称为固定位置参数(必须按照构造函数的位置填写一一对应),后者叫具名参数
   6、在XAML中添加后台处理代码<x:code><![CDATA[在这里添加代码]]></x:code>
 
第四章 x名称空间详解
   1、x名称空间映射的是 http://schemas.microsoft.com/winfx/2006/xaml, 它包含的类均与解析XAML有关
   2、x:class:这个Attribute的作用是告诉XAML编译器将XAML标签的编译结果与后台的代码中指定的类合并
        注:a、这个 Attribute 只能用于根节点(类标签)
               b、它的值所指示的类型必须使用partial关键字定义
   3、x:ClassModifier:这个Attribute的作用是告诉XAML编译由标签编译生成的类具有怎样的访问权限
        注:a、被使用的标签必须要有小x:class 特性 (即只能使用在类标签(根节点))
   4、x:Name:是用来创建引用变量的,以便后台代码可以直接通过引用变量来访问实例
       到底使用Name还是使用x:Name??(Name属性是定义在FrameworkELement类中的,这个类是WPF控件的基类,所有控件都有这个属性,
       使用这两个的效果是一样,如果一个标签没有对应的Name属性就只能使用x:Name)
   5、x:FieldModifier:限制字段的访问权限
   6、x:Key:为资源(Resource  Key--Value的形式)贴上用于检索的索引
        <Windows.Resources>
            <sys:String x:Key="myString">我的资源</sys:String>
        </Windows.Resources>
   7、x:Shared:标记资源是检索到的同一个对象(true)还是对象的副本(false)
   8、x:Type:用于表达某个数据类型(它是标记扩展,貌似在win8开发中没有)
   9、x:Null:用于设置空值
   10、x:Array:通过他的Items属性向使用者暴露一个类型已知的ArrayList实例(Win8开发貌似也没有)
   11、x:Static:在XAML文档中使用数据类型的Static成员(貌似还是没有)
   12、XAML指令元素只有两个x:Code和x:XData
 
第五章 控件与布局
   1、逻辑树(Logical Tree):如果不考虑控件内部的组成结构,只考虑由控件组成的树,那么这棵树叫作逻辑树
        可视元素树(Visual Tree):如果连控件本身的树也考虑在内,则这棵比逻辑树更繁茂的树称为可视元素树。
         

《深入浅出WPF》学习笔记一XAML和控件基础

     
   2、内容属性:控件通过自己的某个属性引用着作为其内容的对象。
   3、WPF的UI元素的类型
       

《深入浅出WPF》学习笔记一XAML和控件基础

 
    4、ContentControl族:
          均派生子ContentControl类
          他们都是控件,并且内容属性的名称为Content
          只能由单一元素充当其内容 (即内容属性里面只能有一个元素,但是可以用其他可包含元素包含多个元素) 
         

《深入浅出WPF》学习笔记一XAML和控件基础

   5、HeaderedContentControl族
        继承ContentControl
        包含两个内容属性Content和Header,但都只能容纳一个元素

《深入浅出WPF》学习笔记一XAML和控件基础

   6、ItemsControl
        均派生自ItemsControl类,用于显示列表化的数据。
        内容属性为Items或ItemsSource
        每种ItemsControl都对应有自己的条目容器(Item Container)

《深入浅出WPF》学习笔记一XAML和控件基础

   7、HeaderedItemsControl族
       多了一个Header内容属性
       包括 MenuItem、TreeViewItem、ToolBar
   8、Decorator族
        在UI上起装饰的效果
        内容属性为Child,并且只能由单一元素充当其内容

《深入浅出WPF》学习笔记一XAML和控件基础

   9、TextBlock和TextBox族
   10、Shape族
          用于画2D图形使用Fill属性为他们填充效果,Stroke设置边线的效果。没有内容属性
   11、Panel族
         用于布局
         内容属性为Children,内容可以有多个元素。

《深入浅出WPF》学习笔记一XAML和控件基础

   12、UI布局
           Grid、StackPanel、Canvas、DockPanel、WrapPanel
          绝对值:double数值加单位后缀,
          比例值:double数值后面加上(*),解析器会把所有比例值的数值加起来作为分母,把每个比例值作分子再用这个值乘以未被占用的空间
          自动值:Auto,最终值由控件内的实际值决定

相关文章: