想自己开发一个程序,有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。这样一个过程中,都经过了哪些事件的触发和处理。(多看源码)
转载于:https://www.cnblogs.com/CSSZBB/p/9505986.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101477.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...