wpf界面切换方法、装置、计算机设备及存储介质
技术领域
1.本发明涉及软件开发领域,尤其涉及一种wpf界面切换方法、装置、计算机设备及存储介质。
背景技术:2.通常使用wpf开发桌面软件时,一般都是在窗口(window)中嵌套用户控件(usercontrol)或页面(page)之类以实现界面跳转,在开发过程中都会创建包含界面文件(xaml文件)和逻辑处理文件(cs文件),其中界面文件(xaml文件)和逻辑处理文件(cs文件)在命名上都是相关联的,比如界面文件(xaml文件)命名为xxx.xaml,则逻辑处理文件(cs文件)命名必须为xxx.xaml.cs才能实现界面显示与逻辑功能的关联,但这种传统方式开发项目有以下缺点:
3.每个用户控件(usercontrol)或者页面(page)都会创建一个界面文件(xaml文件)加上一个逻辑处理文件(cs文件),导致项目文件过多、项目打包之后安装包占用空间过大。
技术实现要素:4.本发明的目的是提供一种wpf界面切换方法、装置、计算机设备及存储介质,旨在解决现有wpf项目中,需要保存的项目文件过多的问题。
5.为解决上述技术问题,本发明的目的是通过以下技术方案实现的:提供一种wpf界面切换方法,其包括:
6.接收目标显示组件,并将所述目标显示组件的业务逻辑处理文件删除,其中,所述目标显示组件包括目标页面或用户控件;
7.将所述目标显示组件的界面文件中的xaml文本以文本的方式写入本地数据库中;
8.在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件。
9.另外,本发明要解决的技术问题是还在于提供一种wpf界面切换装置,其包括:
10.接收单元,用于接收目标显示组件,并将所述目标显示组件的业务逻辑处理文件删除,其中,所述目标显示组件包括目标页面或用户控件;
11.读写单元,用于将所述目标显示组件的界面文件中的xaml文本以文本的方式写入本地数据库中;
12.执行单元,用于在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件。
13.另外,本发明实施例又提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的wpf界面切换方法。
14.另外,本发明实施例还提供了一种计算机可读存储介质,其中所述计算机可读存储介质存储有计算机程序,所述计算机程序当被处理器执行时使所述处理器执行上述第一
方面所述的wpf界面切换方法。
15.本发明实施例公开了一种wpf界面切换方法、装置、计算机设备及存储介质,其中,方法包括:接收目标显示组件,并将所述目标显示组件的业务逻辑处理文件删除,其中,所述目标显示组件包括目标页面或用户控件;将所述目标显示组件的界面文件中的xaml文本以文本的方式写入本地数据库中;在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件。该方法一方面精简了wpf项目的结构,即删除了目标显示组件的业务逻辑处理文件,使得wpf项目便于维护;另一方面,通过将目标显示组件的界面文件写入本地数据库,使得该界面文件不用裸露并编译到wpf项目中,加强了wpf项目的数据安全性。
附图说明
16.为了更清楚地说明本发明实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
17.图1为本发明实施例提供的wpf界面切换方法的流程示意图;
18.图2为本发明实施例提供的wpf界面切换装置的示意性框图;
19.图3为本发明实施例提供的计算机设备的示意性框图。
具体实施方式
20.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
21.应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
22.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
23.还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
24.请参阅图1,图1为本发明实施例提供的wpf界面切换方法的流程示意图;
25.如图1所示,该方法包括步骤s101~s103。
26.s101、接收目标显示组件,并将所述目标显示组件的业务逻辑处理文件删除,其中,所述目标显示组件包括目标页面或用户控件;
27.s102、将所述目标显示组件的界面文件中的xaml文本以文本的方式写入本地数据库中;
28.s103、在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件。
29.其中,xaml为extensible application markup language的英文缩写,相应的中文名称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。
30.在实际应用过程中,每新建一个wpf项目,就会自动生成一个主窗口的界面文件和业务逻辑处理文件,其中,主窗口的界面文件命名为main.window.xaml文件,主窗口的业务逻辑处理文件命名为main.window.xaml.cs文件,每当设计的目标显示组件插入主窗口时,目标显示组件的业务逻辑处理文件和界面文件均会存储入主窗口的项目文件内,其中,该目标显示组件的业务逻辑处理文件命名为xxx.xaml.cs文件、界面文件命名为xxx.xaml文件。
31.由此可知,当接收的目标显示组件数量越多时,一方面会导致该wpf项目的内存变大即项目文件过多,使得项目打包之后安装包占用空间过大,浪费了存储空间;第二方面,每个目标显示组件的的逻辑处理都在指定的业务逻辑处理文件中进行,这样wpf项目维护起来不方便,不便于快速定位逻辑处理的地方,例如必须找到指定的目标显示组件的业务逻辑处理文件,并找到指定控件(比如说按钮button)逻辑处理的地方才能进行维护;第三方面,如果目标显示组件的界面文件(xaml文件)有任何改动,都必须重新发布版本,用户必须进行更新才能获取这些更新,这样如果频繁发布版本,会增加公司的运营成本。
32.通过本技术实施例中的wpf界面切换方法,将目标显示组件的业务逻辑处理文件进行删除后,再将界面文件和后台逻辑进行关联,在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件,也就是说,通过该wpf界面切换方法减少了wpf项目的文件数量,又确保能够顺利跳转到目标显示组件,进而有效的提高了wpf项目的精简性,便于后期对wpf项目进行维护。
33.在一实施例中,步骤s102之后,包括:
34.将目标显示组件的界面文件进行删除。
35.由于目标显示组件的界面文件的xaml文本已经写入本地数据库中,为了进一步精简wpf项目的文件数量,将目标显示组件的界面文件进行删除。
36.在一实施例中,步骤s102包括:
37.s1021、创建本地数据库,并在本地数据库中创建关系型表,用于存储xaml文本以及查询id;
38.s1022、将所述目标显示组件的界面文件中的xaml文本插入所述关系型表中,并自动生成对应的查询id。
39.在实际应用过程中,步骤s1021中本地数据库包括但不局限于sqlite数据库;在sqlite数据库中创建关系型表pageview,其中,关系型表pageview包括pageid字段和viewstring字段,其中,pageid字段设置为字符串型,用于存储查询id;viewstring字段设置为文本型,用于存储xaml文本。
40.在步骤s1022中,当将所述目标显示组件的界面文件中的xaml文本插入所述关系型表pageview中,关系型表pageview会自动增加一条带数据信息的查询id,例如将查询id指定为m00001。
41.对比于现有技术中,传统开发的wpf项目可以经过一定手段或者工具看到wpf项目
的结构和原理,进而导致wpf项目的安全性较差,造成研究成果的泄漏,通过将xaml文本写入关系型表内,使得wpf项目具有较佳的安全性。例如在项目混淆以及sqlite数据库加密之后,整个项目的代码结构变得异常安全,针对一些项目破解的技术人员来说,这是一个巨大的障碍,这种操作使得开发出来的项目的安全性提升了一个档次,并且使得项目在理论上只需要一个主窗口(window)和一些必要的帮助类(helper)就可以实现项目需求的所有功能,并实现所有界面或者逻辑效果,并能改进以上传统方式的所有缺点。
42.为了实现主窗口与目标显示组件之间的跳转,在一实施例中,在步骤s102之后且在步骤s103之前,包括:
43.s1031、在所述主窗口的界面文件中添加一个命名空间;
44.s1032、在所述命名空间内添加交互触发器节点;
45.s1033、在所述交互触发器节点中添加类型监听节点;
46.s1034、在所述类型监听节点中添加查询节点,其中,所述查询节点中传递所述查询id的参数和界面跳转的指令。
47.具体一实施例中,在所述主窗口的界面文件中添加一个命名空间,例如命名空间为xmlns:i=“http://schemas.microsoft.com//expression/2010/interactivity”节点;在该命名空间内添加交互触发器节点,其中,交互触发器节点为i:interaction.triggers节点;在所述交互触发器节点中添加类型监听节点,其中,类型监听节点为i:eventtrigger eventname=“loaded”节点;在所述类型监听节点中添加查询节点,其中,查询节点为i:invokecommandaction command=“gotopage”、commandparameter=“pageid”节点,在该查询节点的commandparameter节点中填写自定义参数,与在本地数据库中的查询id的信息相对应。例如commandparameter=“m00001”。
48.添加xmlns:i=“http://schemas.microsoft.com//expression/2010/interactivity”的命名空间是因为interaction.triggers是这个命名空间下面定义的,所以必须添加这个命名空间,而添加interaction.triggers节点是因为要调用这个节点下面的的事件触发eventtrigger,触发的方法名是loaded,即在本窗口加载后即触发该命令。添加invokecommandaction节点则是调起指定的命令,即window.commandbindings中定义的两个命令之一。
49.在一实施例中,步骤s103之前,包括:
50.在所述主窗口的界面文件中添加窗口指令绑定节点,在所述窗口指令绑定节点,并将所述第一指令绑定节点的command定义为gotopage,excute定义为ongotopage,使得主窗口的业务逻辑处理文件自动生成可接受发起者和查询id的ongotopage界面跳转方法。
51.具体一实施例中,在所述主窗口的界面文件中添加窗口指令绑定节点,例如窗口指令绑定节点为window.commandbindings节点,在window.commandbindings节点中添加第一指令绑定节点,第一指令绑定节点为commandbinding节点,其中,将commandbinding节点中的command定义为gotopage,excute定义为ongotopage,在本实施例中,commandbinding节点只接收两个参数,其中一个类型为object的参数sender,用于标识调起命令的发起者,另一个类型为executedroutedeventargs的参数e,用于接收调起命令时传入的一些参数;通过上述节点的设置,使得主窗口的业务逻辑处理文件自动生成可接受发起者和查询id的ongotopage界面跳转方法。
52.因为删掉cs文件已经消除了目标显示组件的业务逻辑处理文件和界面文件之间的关联性,步骤s103启用的是命令,而非传统的事件触发,步骤s103绑定了window.commandbinding节点下面定义的gotopage命令,然后执行的是excute中定义的ongotopage方法。
53.在步骤s103中,在需要加载目标显示组件时,通过主窗口的业务逻辑处理文件中的ongotopage界面跳转方法,commandbinding节点中的参数e接收到查询id m00001,通过查询id m00001将写入sqlite数据库中的xaml文本读取。
54.在一实施例中,所述步骤s103包括:
55.s103’、利用将文本转成目标对象的方法,将读取到的xaml文本转换成frameworkelement;
56.s104’、通过在所述主窗口的界面文件预先添加的导航节点调用导航方法,在主窗口中加载所述frameworkelement,以跳转到所述目标显示组件。
57.具体一实施例中,步骤s103’中的文本转成目标对象的方法可以是微软提供的system.windows.markup.xamlreader.parse方法;
58.在步骤s104’中,通过在所述主窗口的界面文件预先添加的导航节点调用导航方法包括:
59.在主窗口的界面文件添加一个布局控件节点,例如微软提供的布局控件grid节点,在grid节点中再添加一个导航节点,例如微软提供的导航控件frame节点,其中,frame节点用来承接导航的目标显示组件,并且frame节点命名为x:name=“frame”。在本实施例中,将变量frameworkelement命名为fe。在需要在需要加载目标显示组件时,在frame节点中调用微软提供的navigate方法,调用方式为frame.navigate(fe),使得跳转到所述目标显示组件。
60.在一实施例中,步骤s103之前,还包括:
61.在所述窗口指令绑定节点中添加第二指令绑定节点,并将所述第二指令绑定节的command定义为open,excute定义为onopen,使得主窗口的业务逻辑处理文件自动生成可接受发起者和查询id的onopen界面逻辑方法。
62.具体一实施例中,在所述窗口指令绑定节点中添加第二指令绑定节点,第二指令绑定节点为commandbinding节点,即在window.commandbindings节点中添加commandbinding节点,其中,添加的commandbinding节点中的command定义为open,excute定义为onopen,在本实施例中,commandbinding节点只接收两个参数,其中一个类型为object的参数sender,用于标识调起命令的发起者,另一个类型为executedroutedeventargs的参数e,用于接收调起命令时传入的一些参数;通过上述节点的设置,使得主窗口的业务逻辑处理文件自动生成可接受发起者和查询id的onopen界面逻辑方法。
63.在本实施例中,步骤s103之前,还包括:
64.s1035、预先将所述目标显示组件的逻辑交互选项的指令设置为open,并将功能操作选项的指令参数设置为便于解析的参数;
65.s1036、或者预先将使用多路绑定的方式绑定所述目标显示组件的逻辑操作选项,并添加自定义转换器,并设置转换器的参数,将所述转换器的参数转换成键值对;通过主窗
口的业务逻辑处理文件的onopen界面逻辑方法执行不同的逻辑交互。
66.例如点击按钮button刷新wpf项目的数据,可以将按钮button的微软button控件封装的指令参数command设置为open,并将微软button控件封装的指令参数commandparameter设置为便于解析的参数,其中,便于解析的参数例如格式为method:refreshdata:s|para1:data1:s|para2:data2:s的参数;或者预先将使用多路绑定的方式绑定所述目标显示组件的逻辑操作选项,并添加自定义转换器,并设置转换器的参数,将所述转换器的参数转换成键值对,其中,将所述转换器的参数按照以下格式:method作键、refreshdata作值、para1作键或data1作值转换成dictionary<string,object>形式的键值对,在通过主窗口的业务逻辑处理文件的onopen界面逻辑方法中,若参数e接收到键值对的键method对应的值例如refreshdata,则执行相应的逻辑交互,其中键值对作为区分不同逻辑功能的参数。
67.在实际的运用场景中,本技术所述的xaml本地数据库化后的wpf项目在不涉及交互逻辑改变的情况下可以实现自动更新,这种自动更新用户不会有感知,以期达到减少发布新版本的目的,例如,部分软件在特定的节假日如春节等,软件的部分菜单或者按钮被设计成带有象征节假日的特征,此时只需要更新远程服务器数据库,软件启动时通过更新机制将更新后的xaml文件的xaml文本从远程数据库中拉取下来并更新至相应的wpf项目中的sqlite数据库,通过这种方式减少软件的新版本发布次数,进而可提高用户的体验。
68.本技术实施例中提供的界面切换方法,通过删除目标显示组件的业务逻辑组件,然后将目标显示组件的界面文件中的xaml文本写入本地数据库,再将目标显示组件的界面文件进行删除,在需要加载目标显示组件时,从本地数据库中读取出xaml文本,将xaml文本转换成主窗口可接受的类型,例如微软定义的类型frameworkelement,然后将转换后的目标显示组件导航到主窗口中,即跳转到目标显示组件;导航过来的目标显示组件如果有逻辑操作,比如page中有按钮(button)点击时进行数据刷新或者数据拉取,可以将xaml中的button的命令指定为mainwindow中节点window.commandbindings中定义的open命令,该命令专门用来处理各种逻辑(window.commandbindings中定义的open和gotopage命令,一个用来处理逻辑,一个用来处理界面跳转。
69.本发明实施例还提供一种wpf界面切换装置,该wpf界面切换装置用于执行前述wpf界面切换方法的任一实施例。具体地,请参阅图2,图2是本发明实施例提供的wpf界面切换装置的示意性框图。
70.如图2所示,wpf界面切换装置500,包括:
71.接收单元501,用于接收目标显示组件,并将所述目标显示组件的业务逻辑处理文件删除,其中,所述目标显示组件包括目标页面或用户控件;
72.读写单元502,用于将所述目标显示组件的界面文件中的xaml文本以文本的方式写入本地数据库中;
73.执行单元503,用于在需要加载目标显示组件时,读取本地数据库中的xaml文本,并将所述xaml文本转换为主窗口可接受的类型,并输入至主窗口,以跳转到所述目标显示组件。
74.该装置减少了wpf项目的文件数量,又确保能够顺利跳转到目标显示组件,进而有效的提高了wpf项目的精简性,便于后期对wpf项目进行维护。
75.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
76.上述wpf界面切换装置可以实现为计算机程序的形式,该计算机程序可以在如图3所示的计算机设备上运行。
77.请参阅图3,图3是本发明实施例提供的计算机设备的示意性框图。该计算机设备1100是服务器,服务器可以是独立的服务器,也可以是多个服务器组成的服务器集群。
78.参阅图3,该计算机设备1100包括通过系统总线1101连接的处理器1102、存储器和网络接口1105,其中,存储器可以包括非易失性存储介质1103和内存储器1104。
79.该非易失性存储介质1103可存储操作系统11031和计算机程序11032。该计算机程序11032被执行时,可使得处理器1102执行wpf界面切换方法。
80.该处理器1102用于提供计算和控制能力,支撑整个计算机设备1100的运行。
81.该内存储器1104为非易失性存储介质1103中的计算机程序11032的运行提供环境,该计算机程序11032被处理器1102执行时,可使得处理器1102执行wpf界面切换方法。
82.该网络接口1105用于进行网络通信,如提供数据信息的传输等。本领域技术人员可以理解,图3中示出的结构,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的计算机设备1100的限定,具体的计算机设备1100可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
83.本领域技术人员可以理解,图3中示出的计算机设备的实施例并不构成对计算机设备具体构成的限定,在其他实施例中,计算机设备可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。例如,在一些实施例中,计算机设备可以仅包括存储器及处理器,在这样的实施例中,存储器及处理器的结构及功能与图3所示实施例一致,在此不再赘述。
84.应当理解,在本发明实施例中,处理器1102可以是中央处理单元(central processing unit,cpu),该处理器1102还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field
‑
programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。其中,通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
85.在本发明的另一实施例中提供计算机可读存储介质。该计算机可读存储介质可以为非易失性的计算机可读存储介质。该计算机可读存储介质存储有计算机程序,其中计算机程序被处理器执行时实现本发明实施例的xxx方法。
86.所述存储介质为实体的、非瞬时性的存储介质,例如可以是u盘、移动硬盘、只读存储器(read
‑
only memory,rom)、磁碟或者光盘等各种可以存储程序代码的实体存储介质。
87.所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的设备、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
88.以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。