天天看點

《Programming WPF》翻譯 第9章 1.自定義控件基礎

在寫一個自定義控件之前,你需要問的第一個問題是,我真的需要一個自定義控件嗎?一個寫自定義控件的主要原因是為了使用者界面技術專家可以修改控件的外觀,但是正如我們在前些章看到的,内容模型和模闆意味着這通常是不必要的。WPF提供了一個先進的按照規模的定制技術,你應該記住這些——當考慮寫一個自定義控件時。

使用屬性修改一個已有控件的外觀

組合已有的一些控件

将内容嵌入已有控件

使用模闆代替一個已有控件

建立一個自定義控件或其他自定義元素

這個順序提供了漸增的能力級别,以每一級别上輕微的額外成效為交換。在這些簡單的情形中,你可以通過設定屬性來調整一個内嵌控件的行為和外觀以滿足你對的需求。下一步是将控件編譯在一起,形成一個更強大的整體。你可以通過将内容嵌入另一個控件的方式,把這個合成物帶入到下一步驟。你可以使用一個模闆完全替換外觀,正如第5章所描述的。一旦技術1-4都沒有滿足你的需求,編寫一個自定義的元素就像自定義控件,看上去像是一個答案。

是否需要寫一個新的可視化元素類型,一個重要的訓示是,你是否計劃添加一個新的API特性。即使在這種情形,你應該仔細的考慮要寫哪一種自定義元素類型,控件并不是唯一的元素種類。通過寫一個底層的元件,并內建到已知控件中的外觀中,你可以得到更多的彈性。例如,大量的使WPF彈性化的元素,如布局類和Shapes,派生于FrameworkElement,實際上并不是控件——它們不是從Control基類派生的。

如果你确定一個自定義元素使最好的進行辦法,你需要做完大量的設計步驟。首先,你必須挑選出基類。它會派生自FrameworkElement,Control,或WPF提供的其它基類型之一麼?然後你必須定義API,決定你的元件哪個屬性,事件和指令。最後,如果你的新元素提供了與内嵌元件相同的彈性,你需要注意元素和其模闆間的接口。

繼續閱讀