本文提供了一个最简的方法,可以用到整个 WPF 框架里面所有 internal 内部权限的成员的方法。这是一个我自己定制的 WPF 框架,可以在此基础上构建属于自己的定制化的 WPF 框架

本文提供的方法适用于 .NET 5 和 x86 下,如果需要其他版本,请自行构建和使用,关于如何自行构建和定制化,请看 手把手教你构建 WPF 框架的私有版本

现在的 WPF 属于 dotnet 基金会组织下的一个开源仓库,基于 MIT 协议,意味着我可以进行魔改然后私有发布甚至不再公开源代码商业使用。而 WPF 是一个跨了很多代技术的框架,在 WPF 仓库里面既可以看到最新的 .NET 5 的代码也可以看到上古的 Perl 的构建代码。这样就会存在一个问题,本地构建难度很高,调试难度也很高。想要在本地构建出来,需要自己的设备的网络能访问世界上任意的网络。而如果想要在 VisualStudio 上直接构建出来,那就需要很多 msbuild 的预编译知识,和一些引用关联知识,虽然不难,但是知识量还是摆在这里的

于是此时的给 WPF 框架开发的劝退力就太足了,想要自己定制化属于自己的 WPF 框架难度有点大,至少我每次定制化的步骤都有点多。因此我就在摸索最佳实践,找到了最简的方法,请看下文

先不聊啥原理,原理部分我将会放在其他的博客里面,原因是原理太多了

使用本文的方法能实现的是,在我提供的程序集里面,可以访问到 WPF 框架里面所有 internal 内部权限的成员。限制是只适用于 .NET 5 和 x86 下,如需有其他定制还请阅读我的原理博客,或者找我私聊让我帮你做一些基础搭建

在开始之前,需要说明的是,即使是最简方法,依然还是有一些小限制的。首先你需要本地有安装 7z 压缩工具,其次你需要一个包含了最新版本的 VisualStudio 神器

准备好了之后,咱就开始吧

第一步是下载我提供的基础框架,可以从 CSDN 下载 或者给我一封邮件让我发给你

第二步是解压缩下载的基础框架,下载下来是一个 7z 压缩包,需要解压缩才能使用

第三步就是双击 dotnetCampus.WPF.sln 打开

好了,贺喜你,基础部分就完成了,接下来就只需要在 Program.cs 写代码就可以了。在 dotnetCampus.WPF 程序集里面写的代码,能用到 WPF 框架里面所有 internal 内部权限的成员

在 Program.cs 代码里面可以看到我的模版内容

        [STAThread]static void Main(string[] args){var application = new Application();var window = new Window(){Title = "林德熙是逗比"};window.Loaded += (sender, eventArgs) =>{// 这里的 GetAppWindow 是 internal 的方法,但是在这个程序集可以访问var navigationWindow = application.GetAppWindow();};application.Run(window);}

如果你尝试在自己的 WPF 项目里面,调用 Application 类的 GetAppWindow 方法,将会提示你没有访问权限或者没有这个方法。但是在这个程序集里面,你可以随意的访问这些 internal 方法

其实 WPF 框架的设计在大体上是十分好的,大部分的定制都能通过调用 itnernal 内部权限成员,如类或方法实现。有了这个基础框架,就能极大提升开发的 WPF 框架的效率,将大部分的实现逻辑放在 dotnetCampus.WPF 程序集。这样能提供非常简单的本地构建调试方法,就和其他基础项目相同的构建调试方法,不需要去了解 WPF 框架相关构建知识

我推荐使用此方法来进行一部分不更改 WPF 已有逻辑的开发,而事实上作为一个庞大的框架,官方 WPF 团队其实也不敢合入对已有逻辑有比较多更改的内容,谁知道有哪个模块静默依赖了。因此更多的是新加,如新加某些新的类或者多开放某些方法等等。当然了即使是不合入官方仓库,自己用的,我也不推荐更改已有的逻辑,因为大家也很难测试全。因此在不更改已有的逻辑下,使用此方法开发的效果和在 WPF 项目里面更改的效果几乎相同

用这个方法构建出来的应用就是用上了自己提供的定制的 WPF 框架,还请大家试试使用此方法

本文提供的这个程序集的最佳实践方法就是提供转换器,传入某个 WPF 框架的类,接着在这个程序集里面使用代理模式这个设计模式将这个类里面的内容开放出来或者进行定制

为什么会选用本文的这个方式来作为最简方法?原因是如果使用 VisualStudio 进行编辑 WPF 框架,会遇到这样的问题,更改一点东西就需要来一个构建,而构建 WPF 是一个缓慢的过程。因为我的技术不够还做不到让 WPF 框架支持增量编译,因此每次构建最少都是 20 分钟。这样的调试效率太低了

实际上本文提供的方法是给 WPF 每个项目都加上了一句 InternalsVisibleTo 到 dotnetCampus.WPF 程序集而已

使用这个方法也是有缺点的,如需要额外添加整个程序集以及在 dotnetCampus.WPF 程序集里面是不能放 xaml 文件的

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

WPF 最简方法使用自己定制的 WPF 框架相关推荐

  1. CSharpGL(28)得到高精度可定制字形贴图的极简方法

    CSharpGL(28)得到高精度可定制字形贴图的极简方法 回顾 以前我用SharpFont实现了解析TTF文件从而获取字形贴图的功能,并最终实现了用OpenGL渲染文字. 使用SharpFont,美 ...

  2. 【邢不行|量化小讲堂系列06-Python量化入门】极简方法将日线数据转为周线、月线或其他周期

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  3. 粗糙集 遗传matlab,一种基于遗传算法和粗糙集的属性约简方法及精神状态评估方法...

    一种基于遗传算法和粗糙集的属性约简方法及精神状态评估方法 [专利摘要]本发明公开了一种基于遗传算法和粗糙集的属性约简方法及精神状态评估方法,该基于遗传算法和粗糙集完成了粗糙集属性约简方法通过设定合适的 ...

  4. VLSI 半定制设计方法 与 全定制设计方法【VLSI】

    VLSI 半定制设计方法 与 全定制设计方法[VLSI] VLSI 半定制设计方法 1. standard cell 设计方法 Standard Cell library 设计方法与步骤 特点 2. ...

  5. Java swing 自定义窗口最大、最小和关闭的极简方法

    Java swing 自定义窗口最大.最小和关闭的极简方法, 直接代码伺候: package com.yufu.test; import java.awt.EventQueue; import jav ...

  6. (转载)最全各种浏览器网页星号点号密码查看最简方法(技术小白也能看懂使用)

    https://blog.csdn.net/superit401/article/details/77892480 最全各种浏览器网页星号点号密码查看最简方法(技术小白也能看懂使用)加粗样式

  7. python画k线图 自定周期_【量化小讲堂- Python、pandas技巧系列】极简方法将日线数据转为周线、月线或其他周期...

    引言: 本系列帖子"量化小讲堂",通过实际案例教初学者使用python.pandas进行金融数据处理,希望能对大家有帮助. 想要快速.系统的学习量化知识,可以参与我与论坛合作开设的 ...

  8. 一起学WPF系列(2):第一个WPF应用程序

    概述 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序.使用 WPF,您可以创建广泛的独立 ...

  9. 【WPF学习笔记】[转]周银辉之WPF中的动画 晓风影天之wpf动画——new PropertyPath属性链...

    (一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...

  10. 为 Revit API 插件创建 WPF 窗口的基本项目(Revit API+WPF 系列 2/3)

    在本系列的第二部分中,我们将讨论在创建 WPF 窗口时应用的基本项目. 为了继续,请确保您的插件项目能够创建 WPF 窗口.如果没有,您最好创建一个具有 WPF 功能的项目模板并创建另一个新项目.然后 ...

最新文章

  1. 架构师之路 — 数据库设计 — SQL 结构化查询语言
  2. Java多线程闲聊(二):活锁和死锁
  3. 前端二十九:两个盒子居中的练习
  4. memcached 启动参数
  5. 02-Wifi通讯架构介绍
  6. AI视觉,视频云新挑战的解决之道
  7. html设置标签上下居中,html 标签内部元素上下居中
  8. 定制jQuery File Upload为微博式单文件上传
  9. python的opencv模块_OpenCV Python - 没有名为cv2的模块(再次)
  10. python contains类似函数_Python也能做到Excel那样,条件统计轻松解决工作需求
  11. 牛客网训练赛26D(xor)
  12. 如何为IE9平台预览版穿上外衣?
  13. 【深度学习基础】张量的描述与深度学习常见张量
  14. 如何将idea代码提交到远程仓库
  15. webservice的接口测试工具
  16. 热门高薪岗位大数据开发 自学转行如何就业(自学教程 学习路线 方法建议)
  17. GNU Assembler
  18. 台式计算机拆机步骤ppt,意式咖啡机的拆解评测ppt
  19. imToken—钱包如何导出助记词?
  20. 2016互联网金融安全峰会报名

热门文章

  1. XML注释与取消注释快捷键
  2. 【专栏必读】王道考研408操作系统+Linux系统编程万字笔记、题目题型总结、注意事项、目录导航和思维导图
  3. PN5321(PN5321A3HN/C106)国产替代,FSVP532软硬件兼容,支持A卡,B卡,FeliCa卡,支持ISO/IEC18092,ECM340点对点
  4. matlab文件编辑器,matlab写出两种打开M文件编辑器的方法
  5. ubuntu20.05安装vmware workstation 16,踩坑:GLib does not have GSettings support.
  6. 10个Python爬虫入门实例
  7. 谷歌翻译配置hosts
  8. SRS:软件需求规格说明书
  9. Nginx面试题(总结最全面的面试题!!!)
  10. java8 API 中文 翻译版 java帮助文档下载