最近學習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,最終值由控件內的實際值決定