《深入淺出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,最終值由控件內的實際值決定


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM