一个简单的WPF界面框架

一个简单的WPF界面框架

  想自己开发一个程序,有Menu菜单栏,点击菜单栏能够弹出相应界面。但是点击弹出的一般都是WINDOW。想要放在一个子页签下,可以用TabControl.

但是TabControl默认是显示时就加载所有子TabItem的,太笨重,而且TabItem也没法关闭释放资源。一旦页签多了,变得异常的笨。

于是开发了一个简单的基于TabControl的界面框架,支持点击菜单动态加载页面支持关闭页面

界面如下

一个简单的WPF界面框架

 

代码比较简单,有兴趣的朋友直接看源码    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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101477.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Flink教程(30)- Flink VS Spark[通俗易懂]

    Flink教程(30)- Flink VS Spark[通俗易懂]文章目录01引言02FlinkVSSpark2.1运行角色2.2生态2.3运行模型2.4编程模型对比2.5任务调度原理2.6时间机制对比2.7kafka动态分区检测2.7.1SparkStreaming2.7.2Flink2.8容错机制及处理语义2.8.1SparkStreaming保证仅一次处理2.8.2Flink与kafka0.11保证仅一次处理2.9Backpressure背压/反压2.9.1SparkStreaming的背压2.9.2Fli

    2025年6月3日
    0
  • java 打包 jar包和war包的区别

    java 打包 jar包和war包的区别jar包:对于学习java的人来说应该并不陌生。我们也经常使用也一些jar包。其实jar包就是java的类进行编译生成的class文件就行打包的压缩包而已。里面就是一些class文件。当我们自己使用maven写一些java程序,进行打包生成jar包。同时在可以在其他的工程下使用,但是我们在这个工程依赖的jar包,在其他工程使用该jar包也要导入。这是jar的里面的class文件war包:其实…

    2022年5月23日
    38
  • ubuntu开机进入tty1_ubuntu tty模式

    ubuntu开机进入tty1_ubuntu tty模式1、一个作为宿主机的Linux;本文使用的是RedhatEnterpriseLinux5.4;2、在宿主机上提供一块额外的硬盘作为新系统的存储盘,为了降低复杂度,这里添加使用一块IDE接口的新硬盘;3、Linux内核源码,busybox源码;本文使用的是目前最新版的linux-2.6.34.1和busybox-1.16.1。说明:本文是一个stepbystep的…

    2022年8月12日
    5
  • vue+axios上传文件的几种方式及步骤(以上传图片为例)

    vue+axios上传文件的几种方式及步骤(以上传图片为例)1、用js的formData对象上传(服务器返回url地址)<inputclass=”file”name=”file”type=”file”accept=”image/png,image/gif,image/jpeg”@change=”update”/>methods:{update(e){letfile=e.targe…

    2022年6月22日
    48
  • PHP7中标量类型declare的用法详解

    PHP7中标量类型declare的用法详解

    2021年10月30日
    36
  • js刷新当前页面的5种方式

    js刷新当前页面的5种方式强制刷新当前页面1、reload –强迫浏览器刷新当前页面location.reload([bForceGet])//重新加载当前文档bForceGet,可选参数,默认为false,

    2022年6月30日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号