用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的做后端,直接和网页交互,看上去还不错的感觉,有兴趣的可以试一试。

源码:点我下载

原文地址:https://www.cnblogs.com/HelliX/p/13521490.html