想自己開發一個程序,有Menu菜單欄,點擊菜單欄能夠彈出相應界面。但是點擊彈出的一般都是WINDOW。想要放在一個子頁簽下,可以用TabControl.
但是TabControl默認是顯示時就加載所有子TabItem的,太笨重,而且TabItem也沒法關閉釋放資源。一旦頁簽多了,變得異常的笨。
於是開發了一個簡單的基於TabControl的界面框架,支持點擊菜單動態加載頁面,支持關閉頁面。
界面如下
代碼比較簡單,有興趣的朋友直接看源碼 https://files.cnblogs.com/files/CSSZBB/%E7%95%8C%E9%9D%A2%E8%AE%BE%E8%AE%A1%E4%B8%93%E7%94%A8.zip
step1: 新增主界面,放入Menu控件,Menu下面放一個TabControl用來放置點擊Menu后動態生成的頁面。
step2: 修改TabItem的style 吧關閉按鈕給添加上去,並且繼承TabItem新增一個CloseTabItem控件
step3: 新增路由事件--關閉按鈕點擊事件。當點擊關閉按鈕的時候觸發,在TabControl添加對該事件的關注。
step4:新寫關閉按鈕的點擊事件,在點擊事件里面觸發關閉按鈕點擊路由事件,同事把關閉按鈕所在的TabItem作為事件參數上傳。
step5:TabControl收到路由事件,從事件參數中獲取是哪個CloseTabItem觸發了,從自己的Items中Remove移除該CloseTabItem;
step6: 手動GC.colect 。釋放當前關閉的CloseTabItem所占用的資源。
主要使用到的知識點
1 C# gc垃圾回收機制
2 路由事件
3 :思考事件的傳遞與處理。比如點擊某個TabItem,會切換到該TabItem。這樣一個過程中,都經過了哪些事件的觸發和處理。(多看源碼)