網頁

搜尋此網誌

2010年8月23日 星期一

Dependency Properties in WPF 相依性屬性

相依性屬性(Dependency Property)是Windows Presentation Foundation中獨特的屬性,目的是擴充.NET Framework的CLR屬性(Property)功能。我們知道,.NET Framework的類別中基本的成員有欄位(Field)、屬性(Property)、方法(Method)和事件(Event)這四大類。因為WPF是專門用於Windows展示的用途,若是觀察WPF的類別則會發現多了相依性屬性(Dependency Property)路由事件(Routed Event),在應用方面與.NET稍有不同。

相依性屬性最特別的是屬性變更事件(Property Changed Events)的功能,目的是提供一個依據其他輸入值來計算屬性值的方法,有了相依性屬性WPF才能夠設定資源(Resources)、樣式(Styles)、動畫(Animations)與資料繫結(Data Binding)等功能。

與一般.NET屬性互相比較,程式使用撰寫上沒有什麼差異,但底層實作卻完全不同。因此,通常會研究相依性屬性是為了自訂相依性屬性,接下來我們介紹自訂的方法。

假設我們自訂一個相依性屬性是My(型別為Int32),那麼程式會定義一個DependencyProperty型態的MyProperty屬性(欄位的名稱一定要是屬性的名稱附加上後置字元 Property),注意必須是public static readonly的。
class MyClass{
public static readonly DependencyProperty MyProperty;
}
必須用DependencyProperty.Register方法的初始化,直接於宣告時設定,或是在類別的建構函式中(宣告為靜態的建構函式)。
public static readonly DependencyProperty MyProperty= DependencyProperty.Register(
  "My",
  typeof(Int32),
  typeof(MyClass)
);

基本上,這兩個步驟就已經完成自訂相依性屬性,但是通常會利用程式存取這個屬性值,所以還要將相依性屬性包裝成為.NET屬性,利用GetValueSetValue呼叫取得(稱為「CLR包裝函式」)。
public Int32 My
{
    get { return (Int32)GetValue(MyProperty); }
    set { SetValue(MyProperty, value); }
}
若是要加入更完整的相依性屬性功能,則需要屬性中繼資料(Metadata),利用PropertyMetadata類別宣告,通常是設定預設值(如設定為0),或是加入屬性變更事件回呼函式(PropertyChangedCallback)

public static readonly DependencyProperty MyProperty= DependencyProperty.Register(
  "My",
  typeof(Int32),
  typeof(MyClass),
  new PropertyMetadata(0, new PropertyChangedCallback(OnMyChanged))
);

private static void OnMyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
//當屬性值改變要執行的程式碼
}

相依性屬性大致上常用到上述的四個功能,其他像是屬性值驗證、繼承等進階深入議題,請參閱MSDN資料。http://msdn.microsoft.com/zh-tw/library/ms753192(v=VS.90).aspx

###

2010年8月19日 星期四

Windows Presentation Foundation

這篇部落格文章應該早在3月就寫好了,因為當時已經撰寫關於Windows Presentation Foundation的文章。

學習使用Windows Presentation Foundation (簡稱WPF)至今已經快半年了,這段期間主要閱讀兩本書籍,另外也參考MSDN網站的說明來輔助學習,幸運的是.NET Framework 3.5的WPF文件終於有中文版了(加減參考看看)。

第一本書籍,建議初學WPF的人閱讀,觀念講述十分清楚明白,若加上MSDN的說明文件,可以擁有五成功力!
Adam Nathan原著,鄭淑芬譯,Windows Presentation Foundation新一代使用體驗開發實務,台北;悅知文化,2007。

第二本書籍,微軟官方書籍,想要有八成功力一定要再看這一本,因為字數和頁數特別多的關係,閱讀起來比較辛苦一點,加上黑白印刷比較枯燥一些,但是值得一看!
Charles Petzold著,蔡學鏞譯,微軟Windows Presentation Foundation程式設計指南,台北:碁峰資訊,2007。

最省錢的學習文件當然還是MSDN:
最後,也可以參考範例程式學習WPF:http://code.msdn.microsoft.com/wpfsamples

###

2010年8月14日 星期六

The Diamond Sutra and Me 一隻牡羊的金剛經筆記

郝明義,一隻牡羊的金剛經筆記,台北:網路與書出版:大塊文化發行,2009。

他,郝明義先生,1956年出生於韓國,現任大塊文化董事長,與Net and books發行人(這些資訊是書內的作者簡介)。

讀完「一隻牡羊的金剛經筆記」,我對郝明義先生有更進一步的了解(之前知道這位人物是閱讀「越讀者」這本書),更重要的是對我自己而言,我又更認識了自己。

有一點是這本書的精神,郝明義先生在「一隻牡羊的金剛經筆記 」第七章「為什麼提起十年前寫這本書」 這篇文章中敘述:

每個人都應該站在別人的肩膀上前進。
對一個上班族而言,這句話可能另有所指。
然而在閱讀及生命的實踐上,這是好話。
人之異於其他動物,本來就在於透過彼此的分享,可以使前後代之間、同代人之間的心得與體會,可以互相分享。
一方面借助他人的分享,節省自己苦思不得付出的時間;
另一方面自己有所得,也把肩膀借給別人使用。
所有真心寫作的書,都想提供這個作用。......

這段話是讓我最有感覺的一段,與我想要做的事情理念相同!我總是認為,如果有個人(或有本書)在你最困惑的時候,可以給你一個方向思索,我們就不會不知道如何前進,至少可以看看前人的經歷是什麼,然後自己決定行動,總比自己摸索的好吧!而不是找不到、或遇不到困惑的解答。我期許自己未來可以把肩膀借給別人使用,甚至創造更多肩膀。


這本書看了兩遍,每次的閱讀都令我有感而發。對於佛經的觀點,我認為就是哲學的探討,不同的經典提供不同的觀點和層次讓我們思考。郝明義先生在書中敘述:

如果說《金剛經》是一部登峰造極的內功心要,《六祖壇經》就是這部心要的白話版、
演義版,《金剛經口訣》是註解版、分解動作版,《心經》則是濃縮的短詩。

這是多麼有系統、有架構性的觀點!萬事萬物也是如此。有幸在廿多歲可以讀到郝明義先生的「一隻牡羊的金剛經筆記 」,遇到這一本書,讀了之後,人生不再如同過往那般。

2010年8月9日 星期一

System.Xml 可延伸標記語言

.NET Framework類別庫中處理XML(可延伸標記語言)的是System.Xml命名空間,操作XML最重要的概念是文件物件模型(Document Object Model, DOM)的操作方式,除了DOM的方式還有SAX(Simple API for XML)的操作方式,不過.NET Framework沒有SAX。

System.Xml命名空間比較重要的類別(Class)有下列幾個:
  • XmlNode
    表示 XML 文件中的單一節點。
  • XmlDocument
    表示 XML 文件。 
  • XmlElement
    表示項目。這是 W3C 文件物件模型 (DOM) 中其中一個最常用的節點類別。
  • XmlAttribute
    表示屬性 (Attribute)。屬性的有效和預設值是在文件類型定義 (DTD) 或結構描述中定義。
  • XmlText
    表示項目或屬性 (Attribute) 的文字內容。
  • XmlComment
    表示 XML 註解的內容。
  • 每一個XML文件只能有一個根元素(root element)
  • 每個元素(element)必須擁有起始標記(start tag, opening tag)和結束標記(end tag, closing tag),除了沒有內容是使用空元素標記(empty-element tag)
  • 各個元素不能相互重疊,元素之間必須是是階層式的方式,子元素必須在父元素之內。
  • 所有的屬性(Attribute)必須使用單引號或雙引號封閉。
  • 元素與屬性名稱都是區分大小寫的(case-sensitive)
在.NET Framework中操作XML時通常是使用XmlDocument讀取或寫入檔案(載入和儲存 XML 資料),再使用像是CreateElement方法、AppendChild方法、SelectNodes方法、SelectSingleNode方法等操作XmlElement節點。

###

2010年8月8日 星期日

Education 教育制度

有鑑於jasper312等人對於教育制度的疑惑,本篇文章將解釋我所知道的制度內容,以及我個人的心得感想,當然,這不是標準答案(參考就好)。

台灣的教育制度大概是長成下表這樣,以7年級(1981-1990)的觀點來看,現在的(9年級)教育制度又有些變化,我沒有深入了解!敬請酌量參考閱讀。

名稱
6 國小
3 國中
3 高中 高職 五專
4 大學 四技 二專
二技
2 研究所
N 博士班

可以看到,每個人在國中以前的教育制度都是相同的!9年讀完「國民小學」和「國民中學」,這時候已經15歲左右了!

生命從你16歲那年開始變得不一樣,國中以後是三條路徑:高中、高職、五專。依據過去的案例,成績好的學生會去「高級中學」,而成績差一點的會去「高級(工業、商業)職業學校」或是「五年制專科學校」。

爾後,高中生會繼續考試入學「大學(或稱「普通大學」)」,而高職生與五專生則比較複雜一些,大概的升學路徑有:
  • 高職→四技(四年制技術學院,或稱「科技大學」)
  • 高職→二專(二年制專科學校)→二技(二年制技術學院)
  • 五專→→二技(二年制技術學院)
注意到,這些升學的途徑之間是可以互相轉換跑道,例如:
  • 高中→四技(科技大學),容易。
  • 高職→大學(普通大學),困難。
  • 五專→四技三年級、大學三年級,困難。
當你的求學階段到達22歲時(如果順利沒有留級延畢...),你可以取得大學文憑獲得學士(Bachelor)學位,之後念研究所畢業取得碩士(Master)學位,再念博士班你就可以取得博士(Doctor of Philosophy, PhD)學位。

接下來談談考試的部分,如下:
  • 國中生→高中、高職:「國民生中學學生基本學力測驗」
  • 高中生→普通大學:「學科能力測驗」
  • 高職生→科技大學:「四技二專統一入學測驗考試」
  • 五專生→二技:「技術校院二年制統一入學測驗考試」
  • 五專生→普通大學、科技大學:各校獨立舉辦轉學生招生考試
  • 大學→研究所:各校獨立舉辦招生考試
  • 研究所→博士班:各校獨立舉辦招生考試
這些考試之中,有個重要的分歧點,那就是高中高職的差異,生命從你16歲那年真的開始變得不一樣,因為所受到的教育內容與方式會有所差異,社會與家人對你的期許和態度也變得不一樣。

若說,就讀高中是條康莊大道,那麼就讀高職會是一條羊腸小徑,每個途徑沿途各有它的景點,沒有絕對好壞的標準!(五專的部分真不知道如何形容,柔腸寸斷嗎...)就好比忠孝東路市民大道,當你想要橫越台北市最好走市民大道,忠孝東路有太多的紅綠燈阻擾,雖然你都可以到達目的地,但是付出的代價會大不相同。而且若要從忠孝東路轉往市民大道,付出的努力會更多一些。

路途中的經歷也將影響你的人生,一方面是教育內容的不同(你可能吃了毒藥而不知道是毒藥),這當然也影響考試的內容,所以轉換道路的困難度也大不相同。另一方面是你周圍的人也不同(建立不同的人脈),認真與競爭的差異將導致你往後程度的不相同,甚至無法和他人競爭,兩個小地方的差異都將會影響你後續人生的發展。

###

熱門文章