因為疫情影響,公司裁員,結束了一年多的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的做后端,直接和網頁交互,看上去還不錯的感覺,有興趣的可以試一試。
源碼:點我下載