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

  最近学习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):如果连控件本身的树也考虑在内,则这棵比逻辑树更繁茂的树称为可视元素树。
         

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

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

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

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

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

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

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