最近发的好多遍文章都是基于我搭建的Caliburn.Micro框架去叠加开发的,随着内容的增多,后续章节讲的内容,有些朋友没看前面文章的话有些就不好理解了,所以今天我就做个整体介绍,方便小伙伴们快速掌握CM这套WPF...点击后会弹出子页面 在子页面点击publishevent可以发布事件消息: 事件发布点击后会在EventAggregator页面查看接收的内容: 其次主页面还添加了一个DataGrid,然后可以添加和删除数据...第五个页面是一个模板匹配的实例,用emgucv实现的: ⑥第六个页面是FTP上传、下载、删除的实例,很古老的文件传输的协议,界面也就三个按钮: ⑦第七个页面是做了一个备忘录:包括了查询,筛选、删除、语音播报等功能,数据这块按理应该从数据库查询
float或者double类型的数值,如果小数点后0的个数≥4,在界面上就会自动以科学计数法显示, 比如:0.00003会显示成这样 但是很多时候我并不希望它这样显示,因为这样不方便编辑,和界面其它数据格式也不统一
为了给STL格式的网格建立网格连接关系,常见的做法是把位置重叠的点融合成一个点。但是这种做法,也让STL格式不能表达带割缝的网格结构了。所以,不建议使用STL格式来存储网格。...其中V是网格顶点数,E是网格边数,F是网格面数,X是网格的欧拉示性数,是一个拓扑不变量。在网格点数很多的情况下,有下面这个近似关系:E = 3 * F / 2, X = 0。...如果网格所有的定向都是相容的,则为可定向曲面,反之为不可定向曲面。莫比乌斯带是有名的不可定向曲面,它只有一面:一个人从某点出发,绕带环游一圈回来后,则站在了这点的背面。...拓扑修复的主要原因是,很多网格算法对网格有流形结构的假设,如果网格不满足流形结构,算法有可能会失败。...逆向软件里导入的网格,往往是第三方软件产生的,没有流形结构的保证,所以第一步处理就需要检测是否有非流形结构。 ---- 子网格的非流形结构 网格处理的时候,常常会遇到子网格结构,也就是部分网格。
自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...一、Grid控件详解WPF中的Grid控件是一种布局控件,用于实现灵活的网格布局,可以将控件以行和列的形式排列,可以用于创建复杂的用户界面。...第二行包含一个标签和一个文本框。第三行也包含一个标签和一个文本框。...2.常用场景WPF中Grid控件是一种非常常用的布局容器,常见的使用场景包括:网格布局:将控件按照行和列的方式排列,使用Grid控件可以轻松实现网格布局的效果;自适应布局:Grid控件可以自适应控件的大小和位置...,使得布局更加灵活;复杂布局:可以在Grid控件中嵌套子控件,实现复杂的布局效果,如数据表格、表单等;控件对齐:可以使用Grid控件中的对齐属性,将控件对齐到指定的位置;嵌套布局:可以使用多个Grid控件来实现嵌套布局
从C#到TypeScript - Proxy 我们知道在C#中要实现代理功能需要自己来实现代理类,并且每个类需要不同的代理类,使用起来不方便,虽然借助一些AOP框架可以一定程度实现拦截,但毕竟框架级别的还是太重了...上面介绍了几个常用的,其他的意思也很明显就不多说了,Proxy的应用场景除了上面说过的MVVM外,还可以用在ORM中,把对象的行为映射到数据库中,还有数据访问的代理,总之想用到代理的可以考虑Proxy。
从C#到TypeScript - 类型 TypeScript和C#一样是微软搞出来的,而且都是大牛Anders Hejlsberg领导开发的,它们之间有很多共同点,现在尝试以C#程序员的角度来理解下TypeScript...现在来看下TypeScript基础类型: 数值 C#的数字类型有好几种:int, long, float, double, byte等,而TypeScript和JavaScript一样,所有的数字都是浮点数...,都是用number表示,这样也省了很了事,少了C#里类似long转int overflow问题。...10进制 let num = 0xa4; // 16进制 let num = 0b10010; // 2进制 let num = 0o24; // 8进制 布尔 boolean,和C#...功能上和C#差不多: 目的都是为数值提供一个友好的名字,增加代码可读性和可重构性 默认情况下从0开始编号 也可以手动赋值 可以实现类似C# Flag特性 但也有一些细节不一样: C#的枚举值toString
从C#到TypeScript - 接口 为了更好的抽象出行为和属性,TypeScript在ES6的基础上增加了接口interface。...C#也有interface,不过TypeScript的接口还不大一样,C#里的接口一般是为类服务,让类实现接口中定义的方法或属性。...TypeScript在C#基础上更进一步,由于JavaScript是门非常灵活的语言,TypeScript作为JavaScript的超集需要保持灵活性,所以接口在TypeScript里可以脱离具体的类,...类的接口 这和C#的差不多,描述了公共的成员;不过实现接口语法有点类似于Java,用的是implements。...从实现上看有点类似于C#的delegate。
从C#到TypeScript - Promise 背景 相信之前用过JavaScript的朋友都碰到过异步回调地狱(callback hell),N多个回调的嵌套不仅让代码读起来十分困难,维护起来也很不方便...其实C#在Task出现之前也是有类似场景的,Async Programming Mode时代,用Action和Func做回调也很流行,不过也是意识到太多的回调嵌套代码可读性差且维护不易,微软引入了Task...这两种转换都是由异步返回的结果给定的,成功取回数据就是resolved,取数据出异常就是rejected。...success'); throw new Error('error'); }).catch(function(error) { console.info(error); // 不会执行到这里...console.info('done')); } catch (e){ console.info(e); // 由于最后面的done,所以会把finally里的异常抛出来,如果没有done则不会执行到这里
从C#到TypeScript - Reflect 在C#里如果想只通过名字来生成类实例、获取属性或执行方法可以使用反射,反射是基于元数据,现在很多流行语言都支持元数据,以此来提供更多便利的功能。...ES6和TypeScript也有Reflect,不过因为JavaScript本身是解释型语言,很多操作如根据名字字符串获取属性,根据字符串执行函数这些原本就有支持,Reflect只是把这些操作归结到一起...Set 定义如下: Reflect.get(target, name, receiver); Reflect.set(target, name, value, receiver); 看上去也很好理解,和C#...Reflect.preventExtensions(target) 让一个对象变为不可扩展 Reflect基本上就是把之前Object的方法和一些命令如delete in之类聚到一起,相信ES6之后用
从C#到TypeScript - function 虽然TypeScript里有了类,但JavaScript的function也还在,这也是和C#的不同所在。...C#里函数不能脱离类工作,但TypeScript的function和JavaScript一样,可以单独工作。...同C#里的函数参数可以有默认值一样,TypeScript也支持,并且还支持可空参数。...TypeScript同样可以通过剩余参数来支持,形式上类似于C#的param。 剩余参数的格式是...restParam: string[]。...泛型函数 同C#一样支持泛型函数,写法也差不多。
从C#到TypeScript - Generator 上篇讲了Promise,Promise的执行需要不停的调用then,虽然比callback要好些,但也显得累赘。...console.info(p.next()); console.info(p.next()); 先看下和普通函数的区别,function后面多了一个*,变成了function*,函数体用到了yield,这个大家比较熟悉,C#
从C#到TypeScript - 类 在ES6之前Javascript的类都是用function定义的,ES6把类关键字正式加进来,虽说其实也还是function,不过代码可读性上好了不少。...TypeScript同样支持class,并且和C#也非常相似,下面来看看: 类 同C#一样,由构造函数,属性,方法组成,属性和方法有三个级别的访问权限:private, protected, public...,比C#少个internal。...不过不同的是C#类的成员默认是private,而TypeScript默认是public。 在类里面所有成员都必须用this来访问。...u.checkLogin()); // true u.name = 'test'; console.info(u.checkLogin()); // false 参数属性 上面的User类有两个成员,而且都是从构造函数赋值的
从C#到TypeScript - 变量 TypeScript的变量声明和ES6差不多,相比之前主要是多了let和const 为什么不用var 不管是TypeScript还是ES6都会兼容以前的javascript...虽然C#里也有var,但和JavaScript的可不一样,var在javascript里会有一些奇怪的表现,比如会置前,而且作用域是整个函数,可以不写var来声明变量,然后变量变成全局。...这些都可能会带了一些不容易注意到的问题。...const C#也有const,意义上差不多,都是常量,不想变量被改变。
《博客内容》:.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。...这些控件都是WPF中常见的标准用户界面元素。 自定义控件则允许开发人员使用XAML和C#等编程语言来创建个性化的用户界面元素。自定义控件可以根据需求提供更多的功能和自定义化选项,以及更好的用户体验。...SnapsToDevicePixels:指定是否将元素对齐到设备像素。 IsHitTestVisible:指定是否对Border进行命中测试。 Opacity:设置Border的不透明度。...文本框:Border控件可以用于创建文本框,而不必编写额外的代码。可以将其属性设置为对文本进行格式化,如边框、背景色或边框样式。...线框图:Border控件可以用于创建线框图,例如网格线、表格边框或图形边框等。
C# vs TypeScript - 高级类型 上一篇讲了基础类型,基本上用基础类型足够开发了,不过如果要更高效的开发,还是要看下高级类型,这篇和C#共同点并不多,只是延用这个主题。...联合类型 可以从字面上进行理解:其实就是多个类型联合在一起,用|符号隔开。 如: string | number, 表示希望这个类型既可以是string,又可以是number。...TypeScript和C#一样,只不是圆括号改成尖括号。...这点上比C#来得好,一般C#做法可能是用as操作符转过来,然后判断是否为空,如果类型多操作起来也很复杂。 类型别名 类型别名即可以为现有类型取一个新名字。...= System.Generic.List做个别名,不过还是不一样,C#的是可以实例化的。
从C#到TypeScript - async await 上两篇分别说了Promise和Generator,基础已经打好,现在可以开始讲async await了。...async await是ES7的议案,TypeScript在1.7版本开始支持async await编译到ES6,并在2.1版本支持编译到ES5和ES3,算是全面支持了。...async await 用法 和C#里的十分相似,看个例子: function delay(): Promise{ return new Promise((resolve...async function run(){ await Promise.reject('error'); // 这里出异常 console.info('continue'); // 不会执行到这里...this, void 0, void 0, function* () { yield delay(); console.info('run'); }); } 可以注意到其实还是用
从C#到TypeScript - 装饰器 在C#里面如果想要不直接修改类或方法,但给类或方法添加一些额外的信息或功能,可以想到用Attribute,这是一个十分方便的功能装饰器。...function Testable(target: Function) { // 类、方法、属性、方法参数的参数各不相同 //这里可以记录一些信息到target,或者针对target做一些处理,...即属性描述符,有 configurable 是否可以配置,如动态添加删除函数属性之类 writable 是否可写,可以用来设置只读属性 enumerable 是否可枚举,即是否能在for...in中能枚举到...function Column(target: any, name: string) { //把name存起来,这个column仅仅是标识出来对应数据库中的列,常用在ORM框架中 } class
如果想在Windows平台上编写图形界面程序,而且没有跨平台且性能需求比较高,而且对C#语言比较熟悉,那么WPF就是最适合你的了。...WPF虽然出来也有大概十来年了,但是它的很多设计思想还是非常先进的,配合C#这门语言的话更加顺手。WPF的界面设计和程序功能完全解耦,也就是说设计界面和编写程序功能可以互不干扰的同时进行。...网格布局,可以按照网格形式排列组件。 现在返回来看看这个浏览器的布局。首先第一行是按钮和地址栏,第二行就是浏览器控件了。...这里我用到的就是按钮和文本框,当然最重要的是WPF提供的浏览器控件WebBrowser,它封装了浏览器的操作以便我们直接使用。...C#有一个特性叫做事件,WPF也利用了事件来处理程序响应。WPF的控件都包含了大量事件,可以处理鼠标、键盘、触屏等等各种事件,而且仅需要在XAML代码中添加一点代码就可以将事件和处理程序绑定起来。
Button、RadioButton、Hyperlink、MenuItem……这种情况下,由于Prism已经帮我们实现了这些控件的Command属性,可以直接绑定Command属性来完成Click事件到ViewModel...Shell: 主窗口,他的功能都是通过Module来实现的; Bootstrapper: 应用程序的入口点; Region: 内容区域,类似于一个占位符 Module: 真正实现业务功能的东西,是View,数据...,模型组成的集合; Prism是个非常强大的wpf mvvm模式框架,它使用依赖注入,控制反转容器来帮助我们解决团队合作的松耦合问题。
WPF 从 用户控件 到 自定义控件 独立观察员 2024 年 4 月 29 日 一、用户控件示例:能够朝向上下左右四种方向 在 WPF 中,如果想要复用 Xaml 代码,最先想到的肯定是用户控件(UserControl...【修正 2】那么自然而然地就会想着把这个样式资源定义到全局可访问的地方去(比如 App.xaml),或者使用者会引用的资源字典中: 然后再来使用的地方看看,BaseOn 不报错了,全局样式设置时,除了...这用户控件,真是从 质疑自定义控件,到 理解自定义控件,再到 成为自定义控件 啊。...https://gitee.com/dlgcy/DLGCY_WPFPractice/tree/Blog20240429 原创文章,转载请注明: 转载自 独立观察员 (dlgcy.com) 本文链接地址: [WPF...从 用户控件 到 自定义控件](https://dlgcy.com/wpf-from-usercontrol-to-customcontrol/)
领取专属 10元无门槛券
手把手带您无忧上云