• 《深入浅出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,最终值由控件内的实际值决定
  • 相关阅读:
    JQuery empty方法和remove方法的区别,使用remove清除之前的文本内容??
    乙_1023 组个最小数 (20分)
    乙_1022 D进制的A+B (20分)
    乙_1021 个位数统计 (15分)
    乙_1020 月饼 (25分)
    乙_1013 数素数 (20分)
    乙_1009 说反话 (20分)
    乙_1008 数组元素循环右移问题 (20分)
    乙_1007 素数对猜想 (20分)
    乙_1005 继续(3n+1)猜想 (25分)
  • 原文地址:https://www.cnblogs.com/duolete/p/2767900.html
Copyright © 2020-2023  润新知