WPF架构关键技术剖析(2)--XAML、对象序列化、类动态实例化

WPF右键菜单动态传值 WPF右键菜单动态传值简介代码实现1. 代码动态绑定右键菜单以及事件;2. 传值使用 Newtonsoft.Json 序列化与反序列化传递对象; 简介 WPF项目中需要给图片控件添加子元素Label控件,右键点击子元素Label控件,弹出右键菜单,绑定事件,同时把我们需要的ID、等数据作为一个对象传过去。 效果图: ccccccccccc 代码实现 1. 代码动态绑定右键菜单以及事件; MainWindow.xaml 窗体 <Window x:Class="Label添加右键菜单.MainW 阅读详情

我们知道对于界面元素的描述,WPF的XAML不是第一个,HTML就要早很多,delphi的dfm也是一种。界面描述和界面交互逻辑的分离是有很多好处的,比如有利于可视化设计,有利于界面复用等。微软总是想一统天下,WPF的出现也是这种理想。当然,这种理想的出现也是有实际需求支持的。对于应用程序架构来说,传统的CS和BS都在相互融合,所以整合这两种模式下的界面设计也有其需求,并有利于两种模式的转换和融合。WPF采用XAML作为UI呈现的描述语言,而作为一种语言,XAML本身并没有什么需要特别关注的东西,我们只要去遵循这种规则即可。XAML语言的基本思想更HTML并无太大的区别,只是采用XML格式,依然遵循树型架构。XAML中的每个UI元素,实际上都代表后台某个UI类的一个实例,因此我们也可以将这个类的实例在XAML中的表示看做是这个实例对象的一种序列化。

对象的序列化,实际上就是将对象的属性(对象静态特征或者动态特征,在实现中包括属性和域),保存为一种特定格式的字节流(也可以是Bit流),以便于存储和传输。而恢复这个对象为内存中的一个实例的过程就是反序列化,反序列化得过程也是对象动态实例化得过程。对于XAML而言更多的是实例化(反序列化),这个需要由XAML解析程序来完成。由于XAML并仅仅只包含属性,还包含事件等特性,因此比单纯的对象序列化要复杂很多,利用传统的对象反序列化还无法达到内存实例化UI元素的目的。但从原理上来讲都差不多,只是XAML的解析规则更为复杂一些。
当然,在程序实际运行时,UI元素对象的特征和行为(方法)还是需要结合在一起,形成一个真正意义上的UI对象实例。由XAML的解析最终生成相应的对象实例的过程,就是对象动态实例化过程。在这里,要生成对象实例,就需要用到反射机制(对于像delphi那样的,是直接由编译器完成解析并编译到执行代码中去,因此并不需要运行时的解析,因此也不需要反射机制,虽然它也有一些现在反射机制的原型)。反射机制包括两部分,一个是元数据,一个是动态实例化。其中元数据记录了类的信息,比如类名,类的成员信息等。动态实例化其实并不复杂,就是动态构造对应对象的(这个信息来自于XAML)的实例,并把从XAML获取的属性信息等利用反射机制中的赋值机制把实例属性等信息完善。如果把表看做是类,表的一条记录类看做是一个对象的话,元数据就类似于表的结构信息,利用表的结构信息,根据提供的信息构造表的一条记录其实就相当于对象的实例化。在dotnet中要动态构造一个类的实例,可以利用Activator的CreateInstance方法,或者利用Assembly类的CreateInstance方法。

XAML解析过程我们虽然并不是很清楚,但也可以利用对象的序列化来理解这种过程,我在前面的博文中有写这部分内容,所以这里不再赘述。但这个过程的理解非常关键,因为很多看起来很神秘,很高深的事情其实都发生在这个过程中。实际上,对于XAML的解析,我们利用VS提供的XML访问加上反射技术,完全可以做出来,只是没什么实际意义而已。

XAML的具体语法规则,大家可以参考相应的文档,说句实话,我也并不是特别的了解,也并不想去死记硬背。因为我们只需要搞清楚这种实现的内在机制即可。

另外大家需要记住,XAML只是UI元素类的属性描述,我们没法用XAML信息去生成一个新的类,这些XAML中的UI元素对应的类都必须存在于后台代码中,我们只是去实例化这个对象。

题外话:定义像XAML这样的一种语言,是非常难的,然而一旦确定这种语言规则,解析和应用本身就不是很难了。这个世界上真正的高手就是这些(游戏)规则的制定者。

XML与XAML核心技术辨析:从通用数据标记到声明式UI开发 标记语言是定义数据结构与内容的标准方式,其核心原理在于通过标签和属性实现信息的结构化描述。XML作为可扩展标记语言,凭借其平台无关性和自描述性,成为跨系统数据交换与配置管理的通用技术方案,广泛应用于配置文件、数据序列化及Android布局等场景。而XAML在XML语法基础上,演进为一种声明式UI编程语言,通过将标签映射为.NET对象并集成数据绑定、资源系统等特性,专为构建WPF、.NET MAUI等应用的交互界面而设计。理解XML与XAML在定位、语法扩展性及生态绑定上的本质差异,有助于开发者在数据管理与界 阅读详情

相关推荐

基于WPF的动态公式计算器设计与实现

WPF(Windows Presentation Foundation)是.NET框架中基于DirectX的UI框架,突破了传统GDI+的绘制限制,支持硬件加速渲染。其核心架构由三层构成,实现从UI逻辑到像素绘制的完整链路。WPF采用保留模式(Retained Mode)图形系统,通过可视化树(Visual Tree)和逻辑树(Logical Tree)分离界面结构与呈现细节,为复杂动画、样式定制和数据驱动UI提供底层支撑。// 示例:WPF应用程序启动入口。

weixin_29025501的博客 765

记录一下:WPF使用实例化对象

【代码】记录一下:WPF使用实例化对象。

luotuozhisen的博客 415

WPF与XML交互技术详解与实践

XML(Extensible Markup Language)作为一种结构化数据存储与传输格式,在企业级应用和跨平台数据交换中仍占据重要地位。而WPF(Windows Presentation Foundation)作为微软新一代的UI框架,提供了强大的数据绑定机制,使得与XML的交互变得更加自然和高效。WPF通过其内置的数据绑定系统,可以直接将XML数据源绑定到界面控件上,从而实现数据驱动的界面更新。这种能力不仅简化了开发流程,还提升了应用程序的灵活性与可维护性。

weixin_30820933的博客 1153

进一步了解WPF UI 实现XAML语法

XAML(eXtensible Application Markup Language)是一种标记语言,由微软公司开发并用于构建WPF(Windows Presentation Foundation)应用程序的用户界面。XAML提供了一种易于扩展和定位的语法,用于定义应用程序的界面元素和布局。通过XAML,开发者可以以声明式的方式创建用户界面,即直接描述界面的外观和行为,而不是使用编程语言来编写界面逻辑。XAML文件通常具有.xaml扩展名,并可以独立于代码运行。

欢迎来到我的博客,这里记录了我学习、实践和探索过程中的心得体会! 1219

C#绘图技巧:在Visual Studio中利用Windows Forms与WPF实现图形绘制

C#中的绘图功能主要由System.Drawing命名空间中的类提供,这个命名空间提供了对图形和图像操作的广泛支持,包括但不限于绘图基础、颜色处理、字体渲染以及图像文件的读取和写入等。开发者可以通过创建Graphics对象来在窗体上进行各种绘图操作。在Windows Forms应用程序中,绘图功能通常是由控件提供的。控件类型多种多样,特性也各有侧重,这使得开发者能够根据需求选择合适的控件来执行绘图任务。常见的绘图控件包括:PictureBox。

weixin_35636570的博客 1430

使用Xaml.XamlServices序列化或反序列化DependencyObject

如何使用Xaml.XamlServices序列化或反序列化DependencyObject。

动态加载XAML

原文链接:http://www.cnblogs.com/pbuilder/ 好久没写Blogs了,现在在看【WPF编程宝典】,决定开始重新写博客,和大家一起分享技术。 在编程时我们常希望界面是动态的,可以随时变换而不需要重新编译自己的代码。 以下是动态加载XAML的一个事例代码。 在debug文件夹下新建一个文本文件,重命名为:file.xaml 插入界面代码:

Hyman的博客 2173

使用openMVS对样例数据进行重建

openMVS根据github上的步骤进行编译。注意,如果没有GPU,用不了CUDA的话,那么需要在openMVS目录下找到CmakeLists.txt文件,把CUDA设置为OFF: SET(OpenMVS_USE_CUDA OFF CACHE BOOL "Enable CUDA library") 可执行的文件生成在openMVS_build/bin/里面,在openMVS_build文件夹下打开终端,按照顺序执行如下命令即可逐步重建。其中,-w 设置的是数据的总路径,-i 后接输入的文件名,-o

YuhsiHu的博客 2888

【深入浅出WF】——XamlServices的应用

概述为通常的XAML任务提供了高层次的服务(静态方法),这些任务包括序列化地读xaml,写图形化对象,或读图形化对象和写XAML文件并输出。方法Load:方法重载。使用XAML读取器装载源XAML和输出图形化对象。Parse:读取XAML并解析为字符串输出和图形化对象。Save:方法重载。把提供的图形化对象转换为XAML节点,然后输出为序列化格式。Transform:方法重载。使用即时的XAML...

weixin_30369087的博客 202

ThreeJS教程:地图案例(包围盒、正投影)

推荐:将加入你的3D工具链。

jianshi2023的博客 1008

【网络】Ikuai中如何添加/更换虚拟机(图文)

Ikuai 添加虚拟机教程

qq_20623849的博客 6536

.NET Runtime System.Xaml:XAML处理核心机制深度解析

XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)作为.NET生态系统中的核心标记语言,承载着UI定义、数据绑定、资源管理等多重职责。System.Xaml命名空间提供了处理XAML文档的基础设施,是WPF(Windows Presentation Foundation)、UWP(Universal Windows Platform)、...

gitblog_01125的博客 1135

ShardingSphere-JDBC-若依框架集成(SpringBoot)

ShardingSphere基础知识、ShardingSphere-JDBC如何集成进若依框架中 使用的是若依框架前后端版本、动态数据源,可自行切换,默认数据源为达梦8代理端,

编程小菜鸟的笔记 8168

WPF的原理与MVVM模式的思考

对于一般程序语言,执行分为3种: 1)编译成二进制机器代码,由操作系统调用执行;典型的如C,C++,Delphi等. 2)编译成中间语言,由虚拟机解释来执行或及时编译后执行(前者的典型是java,后者的典型是DotNet). 3)不进行编译,有解释器边解释边执行,比较典型的

三人行必有我师,手写三行必有所悟 9549

本地Pycharm连接远程服务器详细配置过程(直接在本地使用服务器显卡,很棒)

相信很多人都遇见过这种情况:实验室成员使用同一台服务器,每个人拥有自己的独立账号,我们可以使用服务器更好的配置完成实验,毕竟自己哪有money拥有自己的3090呢。

NorthSmile的博客 4万+

17、激光切割质量影响因素及优化研究

本文研究了激光切割过程中焦点位置、入射角、激光功率、切割速度和气体压力等因素对切割质量的影响,采用响应面方法(RSM)和Box-Behnken设计,基于三种不同喷嘴对SS 304不锈钢进行实验。通过建立切缝宽度比和条纹深度的回归模型,并结合方差分析验证模型有效性,深入分析各参数对切割质量的影响机制。研究发现喷嘴结构差异显著影响参数作用趋势,尤其在切割速度和气体压力响应上表现明显。最终通过多目标优化确定最小激光功率、适中切割速度和最大气体压力为最优组合,显著提升切割质量,为实际生产提供了理论依据和技术支持。未

grape的博客 131

博文整理(编程技术深入解剖系列--Silverlight,WPF及实战示例)

这个系列主要针对的是Silverlight相关的编程技术,探讨层次比较深入,这里整理了一下,方便大家阅读: WPF架构关键技术剖析(1)--序言 WPF架构关键技术剖析(2)--XAML、对象序列化、类动态实例化 WPF架构关键技术剖析(3)--做自己的交互Action(1

三人行必有我师,手写三行必有所悟 3180

【100%通过率】华为OD机试真题 Python【数字最低位排序】【最低位排序】

2023华为OD机试真题 Python【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 1902

WPF多语言化的实现

WPF多语言化的实现   Metro插件系统系列就暂时停一下,这次我们讨论一下WPF的资源本地化实现,主要用到的:CultureInfo,ResourceManger,MarkupExtension,RESX文件,这些都是.NET框架提供的。 项目结构: 运行结果: 可在程序运行时,实时切换语言 CultureInfo   CultureInfo类表示有关特定区域性的信息,...

DavidLiu的博客 1103

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1996

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

回头来学习wpf的FlowDocument

学习了一段时间的electron,其实是一个神奇的开发方式,让人神往。但其打印和ocx或是activeX方面还是让我不大放心去使用。毕竟当前首要任务还是window的应用开发。 于是重新学习wpf的FlowDocument,竟然发现以下好东西。这回要好好学习了:) https://www.wpf-tutorial.com/zh/55/rich-text%E6%8E%A7%E4%BB%B6/wp...

weixin_30906185的博客 346

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

上一篇: WPF架构关键技术剖析(1)--序言
下一篇: WPF架构关键技术剖析(3)--做自己的交互Action(1)
广州接入
广州接入 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄24年 2224粉丝 731原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值