WPF學習 第六十三章 理解WPF中的自定義元素

2022-05-10 16:17:06 字數 1688 閱讀 2591

儘管可在任意wpf專案中編寫自定義元素,但通常希望在專門的類庫程式集(dll)中放置自定義元素。這樣,可在多個wpf應用程式之間共享自定義元素。

為確保具有正確的程式集引用和命名空間匯入,當在visual studio中建立應用程式時,應當選擇custom control library(wpf)專案型別。在類庫中,可建立任意數量的控制項。

建立自定義控制項的第一步是選擇正確的基類進行繼承。下表列出了建立自定義控制項時一些常用的基類。

名 稱說    明

frameworkelement

當建立自定義元素時,這是最常用的最低階的基類。通常,只有當希望重寫onrender()方法並使用system.windows.media.drawingcontext從頭繪製內容時,才會使用這種方法。

control

當從頭開始建立控制項時,這是最常用的起點。該類是所有使用者互動小組件的基類。control類新增了用於設定背景、前景、字型和內容對齊方式的屬性。控制項類還為自身設定了tab順序(通過istabstop屬性),並且引入了滑鼠雙擊功能(通過mousedoubleclick和previewmousedoubleclick屬性)。但最重要的是,control類定義了template屬性,為了得到無限的靈活性。該屬性允許使用自定義元素樹替換其外觀。

contentcontrol

這是能夠顯示任意單一內容的控制項的基類。顯示的內容可以是元素或結合使用模板的自定義物件(內容通過content屬性設定,並且可以通過contenttemplate屬性提供可選的模板)。許多控制項都封裝了特定的、型別在一定範圍內的內容(例如,文字框中的文字字串)。因此這些控制項不支援所有元素,所以不是內容控制項。

usercontrol

這是可使用設計檢視進行配置的內容控制項。儘管使用者控制項和普通的內容控制項是不同的,但當希望在多個視窗中快速重用使用者介面中的不變模組時(而不是建立真正的能在不同應用程式之間轉移的獨立控制項),通常使用該基類

itemcontrol或

selector

itemscontrol是封裝項列表的控制項的基類,但不支援選擇,而selector類是支援選擇的控制項的更具體基類。建立自定義控制項不經常使用這些類,因為listbox、listview以及treeview控制項的資料繫結特性提供了很大的靈活性

panel

該類是具有布局邏輯控制項的基類。布局控制項能夠包含多個子元素,並根據特定的布局語義安排這些子元素。通常,面板提供了用於設定子元素的附加屬性,配置如何安排子元素

decorator

封裝其他元素的元素基類,並且提供了一種圖形效果或特定的功能。兩個明顯的例子是border和viewbox,其中border控制項在元素的周圍繪製線條,viewbox控制項使用變換動態縮放其內容。其他修飾元素包括為普通控制項(如按鈕)提供熟悉邊框和背景色的修飾類

特殊控制項類

如果希望改進現有控制項,可直接繼承該控制項。例如,可建立具有內建驗證邏輯的textbox控制項。然而,在採取這一步之前,應當首先分析是否可通過事件處理**或單獨的元件達到同一目的。這兩種方法都可使自定義邏輯和控制項相分離,從而可在其他控制項中重用

接下來將看到乙個使用者控制項,乙個直接繼承自contrl類的無外觀的顏色拾取器,乙個使用視覺化狀態的無外觀的的flippanel,乙個自定義的布局面板,以及乙個繼承自frameworkelement類並重寫了onrender()方法的自繪製元素。

《道德經 第六十三章》體悟

本文出自天外歸雲的 今聽碧遊宮通天教主講道 是以聖人猶難之,故終無難矣。深有所感,遂查其出處。原文出自 道德經 又名 老子 為無為,事無事,味無味。大小多少,圖難於其易,為大於其細 天下難事,必作於易,天下大事,必作於細。是以聖人終不為大,故能成其大。夫輕諾必寡信,多易必多難。是以聖人猶難之,故終無...

《道德經 第六十三章》體悟

本文出自天外歸雲的 今聽碧遊宮通天教主講道 是以聖人猶難之,故終無難矣。深有所感,遂查其出處。原文出自 道德經 又名 老子 為無為,事無事,味無味。大小多少,圖難於其易,為大於其細 天下難事,必作於易,天下大事,必作於細。是以聖人終不為大,故能成其大。夫輕諾必寡信,多易必多難。是以聖人猶難之,故終無...

第六十三周學習生活總結

今天是2020年7月19日,最近的暑伏天氣真的讓人很難受呢,三天就得下一場雨,天氣陰晴不定,就剛剛我午休之前天還是下著濛濛小雨,起床後就已經豔陽高照了 實際是被熱醒的 這星期我找了個保安的兼職,幹一天休息一天,雖然一天說是24小時,但是並沒有一開始想的那麼累,休息時間還是有的。這樣賺點零花錢也,感覺...