用WEB方式开发WPF桌面程序
因为疫情影响,公司裁员,结束了一年多的web开发经历,重新开始做桌面,新公司用的是WPF(居然用的是winform style。。。),当然这跟本文没有关系。。。上篇博客写的用后台api和前台浏览器控件的方式来做桌面程序,这篇文章用nancy+cefsharp实现了一种方式,使用WPF的原因是因为winform在高分辨率屏幕上会有问题,cefsharp会显示黑边,虽然可以解决,但始终不是很好的感觉。演示界面如下:
后端API
Nancy(https://github.com/NancyFx/Nancy)是一种web后端框架,现在已经不再维护,但是功能应该说已经很完善了,当然也可以使用微软WebApi来实现
void InitWeb() { var hostConfigs = new HostConfiguration { UrlReservations = new UrlReservations() { CreateAutomatically = true }, MaximumConnectionCount = 1 }; Uri uri = new Uri("http://localhost:8888"); var host = new NancyHost(hostConfigs, uri); host.Start(); }
给nancy添加静态页面路径
public class Bootstrapper : DefaultNancyBootstrapper { protected override void ConfigureConventions(NancyConventions nancyConventions) { base.ConfigureConventions(nancyConventions); nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("", "/web")); //nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Scripts", "/Scripts")); } }
添加api响应函数
public class HomeModule : NancyModule { public HomeModule() { Get("/", x => "Hello World!"); } }
至此,后端api基本完成了,额外功能可以自行添加,这里只做个演示
前端网页显示
这里使用CefSharp,也就是谷歌浏览器内核的封装,也可以用自带的IE内核,但是考虑对前端框架,比如vue这些的支持,还是谷歌内核好一点,除了dll有点大(是特别大,最新版120M!),在WPF添加浏览器。注意需要设置工程为X64/X86,否则会报错。
<Grid> <cefSharp:ChromiumWebBrowser Address="http://localhost:8888" Name="chrome"/> </Grid>
好了,然后F5运行即可。
本文只是给出了一个大致的结构思路,算是完成了上篇博客的想法,如果公司没有专业的桌面端开发,可以让WEB顶上(压榨)!同时也给出在GITHUB上找到的另一个用web做前端的库:https://github.com/NeutroniumCore/Neutronium ,这个库是用WPF的做后端,直接和网页交互,看上去还不错的感觉,有兴趣的可以试一试。
源码:点我下载