系統: Win7sp1 32位
IDE: Microsoft VisualStudio 2013 Ultimate
Blend 2013
工程: .Net Framework4.5.1
工具: Photoshop CS6
================================
首先明確一點,ToggleButton實際上是CheckBox的變形,分為了三種狀態Checked、Unchecked、Indeterminate
1、制作PSD模板文件,如下圖,背景刪除有利於后續控件制作。
2、啟動Blend2013,其他版本亦可。新建一個WPF Application工程,然后如圖所示導入PSD文件
導入PSD文件后如圖所示
圖中我進行了標記:
① PSD模板中ToggleButton的Checked狀態
② PSD模板中ToggleButton的Unchecked狀態
③ PSD文件中對應圖層保存的格式:Editable content--這個是我們需要的格式,這樣導入后的圖形可以編輯,例如填充顏色,改變描邊等等;Flattened bitmap -- 這個就是保存成為一張普通的圖片,如果是做個按鈕的貼圖還可以,在此例中我們不需要
④ 可能你也會看到這樣的提示,提示表明Photoshop中使用的一些特效在Blend中不支持,不要緊只管導入,有什么問題我們后面可以處理。
至於需要導入的模板,我只勾選了OFF組里面的3個(就是②對應的那個圖),當然你也可以選擇ON組里面的,個人喜好了,那個bg就不要勾選了,就是個白色背景,我們需要的是透明背景。選擇好了后點OK。
Blend導入完成后的狀態如圖所示,應該只有紅框中的一個按鈕
注:btn_07為ToggleButton在Checked狀態下顯示的綠色對勾。這個是我用PS中切片切出來的,因為我勾選的白色OFF狀態下的模板,所以我需要通過代碼做出Checked狀態下(ON模板)的模樣。可能你導入后的圖形顏色會有丟失情況,那是因為Photoshop中使用的一些特效Blend中不支持,不要緊,我們可以在PS中做切片把圖片切出來。例如我的off icon.png這個文件導入后就變成了黑色的,在PSD模板中應該是紅色的。
3、導入PSD模板完成后,應如圖所示。應該只有OFF_Copy這一個畫布(Canvas)
然后我們做如圖中黃色的那部分操作,把這個畫布(Canvas)轉成一個UserControl,點擊后會彈出一個讓你起名字的對話框,
輸入自定義的名稱后會在工程中生成一個UserControl控件。如圖所示:
接下來,我們需要做一個控件的模板(Template),把控件相關的Path、Image等等的控件都包含進去。
這樣做是因為我們需要把這個自定義的控件轉換成ToggleButton,
如果不做這步,直接把節點UserControl改成ToggleButton會有問題滴,至於什么問題可以自己進行嘗試,反正我是試過了。步驟如圖所示:
點擊創建空模板后會彈出一個給模板起名字的窗口,如圖所示:
① 模板的名稱
② 和③其實這兩個是一起的,如果選擇② ,那么自定義的這個模板就會放置在App.xaml中,可以將來做為其他控件的模板,本例中我們只有這一個控件,那么就選擇③了。
點擊OK后,你會發現Design區域的控件不見了,只有一個藍色的空白框在那里。此時我們來看代碼,如圖所示:
我們需要把包括Grid節點在內的代碼替換UserContro.Resources節點下的Grid,替換完成后又看到了我們自定義的控件了,不再是一個空白的藍色框了。
因為我們做的這個控件需要Checked、Unchecked事件,並且最好還是個按鈕,所以ToggleButton正好符合我們的條件,那么我們就把節點UserControl改成ToggleButton,這樣這個控件就繼承了ToggleButton的屬性。