應群里朋友要求,發個基礎教程。由於他是程序員,對blend設計完全沒概念,所以發個很基礎很基礎的教程。
他想實現的效果如下圖
WPF的控件是無外形的控件,可以是任何樣子,這個效果我們用個combox解決。
1.新建一個項目,然后再頁面上添加一個combobox.然后添加兩個comboxitem;
2.編輯combobox的模板。
看下combobox里面的模板是什么樣子。
MainGrid是為布局控件Grid;PART_Popup為點擊按鈕后下方彈出的pop窗口,ToggleButton為點擊的彈出下拉的按鈕,ContentPresenter為承載你選擇值的一個控件。
3.看下我們最終實現的樣式,彈出的框距離按鈕有個邊距,你可能想通過設置PART_Popup的margin來控制位置,但是你這樣做了是沒有效果的,應為PART_Popup的位置是根據ToggleButton改變的。所以我們改變策略,修改pop里面border的邊距。同樣要修改彈出框的背景色,邊框顏色,粗細都是在這里修改dropDownBorder的屬性。
4.combox選中一項后,上面會顯示值出來,我們解決的辦法就是直接刪掉ContentPresenter,不用擔心,不會有任何報錯!
4.彈出下拉的按鈕與我們想實現的效果有所不同,所以我們要編輯ToggleButton的模板。
chrome為微軟默認的主題布局容器,我們可以直接刪掉。我們的combox就不會出現默認的灰色漸變底色了。
5.現在我們可以對按鈕的樣式進行任意操作,可以放背景圖片,改變三角形形狀等等
6.回到最初界面改下combobox的寬度就可以實現上面的效果了。
7.修改pop彈出框里面項的樣式。選擇編輯itemcontainstyle.
ItemTemplate為數據模板,當你的彈出中是圖片加文字的時候,你就需要用數據模板去綁定數據。
ItemContainerStyle為樣式模板。是你彈出中每項的樣式。
ItemsPanel為布局模板,是彈出項中的布局容器。為什么我們看到彈出項中的項是豎直排列的原因就是combobox的ItemsPanel模板默認為StackPanel.
8.我們想設置鼠標移上去的時候背景色為紅色,很多人可能是去更改Bd的背景色。當你使用觸發器來實現這個功能的時候,可以這樣去實現,但是當你使用狀態模板時我們就要使用另一種實現方式。
9.將Bd放入Grid中,同時在Grid中添加一個背景色為紅色的矩形。
10.將矩形的透明度設為0.(當你希望有動畫效果的時候設置Opacity,反之則使用Vislbility)
11。選中狀態面板,然后再選中mouseover狀態,把你剛才設置的Opacity改為100
這樣我們的combobox就實現了。
東西很基礎,多動手就很容易理解,否則你看了再多也不會記住。
最后我們的目標是沒有代碼!!!!!!