在做WPF設計的時候遇到了一個問題,tabcontrol的切換。例如下圖:
你會怎么做這個控件?
1.寫5個tabitem樣式?
2.寫一個自定義控件?
3?
我們的目標是沒有代碼,這樣怎么能符合我們的目標。
好吧,本人比較懶的寫代碼,最終發現了一個方法,只用一個樣式就能解決所有問題!這個神器就是HeaderedContentControl。
HeaderedContentControl的Header和Content都是object類型的,所以可以實現我們需求的功能。
1.新建一個HeaderedContentControl。
2.創建content的數據模板
3.在模板中添加一個圖片
4.給圖片的source添加一個綁定。(什么也不用填,直接點確定)
5.回到HeaderedContentControl的頁面,對headerTemple做同樣的操作。
6.做完以上操作查看下代碼,你的代碼應該有下圖的那些東西。
7.繼續編輯HeaderedContentControl的模板。
8.出現模板編輯頁面后分別給兩個ContentSource命名。
9.看到ContentPresenter1有個contentSource指向header,那么給ContentPresenter2的contentsource指向content
10.給HeaderedContentControl加一個觸發器,判斷圖片的顯示個影藏。美工們按照代碼敲吧,程序門肯定懂什么意思了。
11.注意,注意!我們研究下下面的代碼。
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type CheckBox}},Path=IsChecked}" Value="True">
看到AncestorType={x:Type CheckBox}你會疑問怎么是checkbox,其實這邊該填寫的是上級元素,如果你的是tabitem,那邊這邊就是tablitem,如果是button,這邊就填寫button。path則是觸發觸發器的屬性,我的是checkbox,最IsChecked時觸發。如果你是tabitem,則是IsSelected時觸發。
12.寫完這個控件可以使用了。
13.最后一步,分別給HeaderedContentControl的Header和Content賦值。圖片路徑用絕對路徑
舉一反三:1.到這里就結束了,兩張圖片的切換下次你有了另一個選擇HeaderedContentControl。當你的按鈕都是兩張圖片切換的時候,當你的tabitem
的頭部為兩張圖片切換的時候你都可以用HeaderedContentControl解決。
2.不一定是圖片,文字切換,文字和圖片的切換等等,HeaderedContentControl都可以滿足你。
附tabitem寫法
自己去做一遍吧,很有用的東西。有什么不懂得可以留言,或者去群里問我。
如果覺得對你有幫助,點個推薦吧!
更多的WPF/SL實戰技巧!我們的目標是沒有代碼!