放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
做過很多winform項目,都為winform控件頭疼不已。想實現(xiàn)一些漂亮的樣子總是很難。我這里列舉幾個缺點:
1.winform控件大多是 絕對布局 ,你需要給出準確的坐標。那么在實現(xiàn)居中效果就會很難。
2.學習成本,也了解各個控件的結(jié)構(gòu),屬性等。要想更熟練的掌握需要很多時間。
3.實現(xiàn)界面的成本,調(diào)整各個窗體,控件的樣式到原型圖的效果要用很長時間。
4.維護,需要懂得WINFROM的程序員來進行維護。
?
先想到這么多.我接觸android后,發(fā)現(xiàn)android實現(xiàn)UI的方式很有意思,使用xml描述視圖,使用window包裹activity實現(xiàn)各個窗口。那我們能不能把這樣的形式在桌面應(yīng)用開發(fā)上使用?于是在新項目中,我開始啟用新的開發(fā)方式:
1.寫一個html描述UI,類似android里的layout布局文件。
2.準備一個form窗體作為承載,在這個窗體里放置一個webbrowser控件作為顯示控件,那么這個控件可以直接顯示html
3.為webbrowser控件指定?ObjectForScripting 對象,一般情況下這個對象是個c#實現(xiàn)的class的實例。這個對象實現(xiàn)了 可以和webbrowser控件里的html實現(xiàn)的dom模型交互。它提供了一個通道,可以再這個ObjectForScripting對象里調(diào)用javascript和使用javascript調(diào)用這個對象里的方法。
基于以上的方式我實現(xiàn)了一個簡單的框架。
1.寫一個基本的ControlSupport,它是所有可以作為ObjectForScripting 對象的基類。用于和html交互。
2.在ControlSupport中必須實現(xiàn)oncreate方法,他會在創(chuàng)建時加載。
3.為ControlSupport實現(xiàn)SetContentUrl方法,指定一個本地的html文件給webbrowser控件,那么就可以顯示它。
4.為ControlSupport實現(xiàn)InvokeScript方法,在這里可以調(diào)用js中的方法。
5.在js中,可以通過下面的方法調(diào)用?ControlSupport里的方法。
if (typeof window.external.getMaterialList != "undefined") {//觸發(fā)瀏覽器的 后臺方法,這個方法只在我們的winform程序發(fā)生 window.external.getMaterialList(callback_getMaterialList);}6.通過上面的實現(xiàn),那么ControlSupport類看起來就像個 activity(android里的頁面),我還實現(xiàn)了一個棧,頁面顯示時,將是位于棧頂?shù)摹D敲唇柚@個堆棧的能力,我們可以實現(xiàn)窗體的跳轉(zhuǎn)和返回。
?
通過以上的方式。我們基本可以完成使用html來做頁面的操作。效果非常的爽,終于可以擺脫winform控件的。實現(xiàn)各種表現(xiàn)方式都非常的簡單。HTML嘛,更加的靈活。
?貼個圖吧。下面這個界面就是用這種方式實現(xiàn)的,僅僅頂部是用winform控件實現(xiàn)的。左側(cè)的導(dǎo)航和右下側(cè)的內(nèi)容區(qū)都是用html來做的頁面。效果看起來完全是一個整體。
轉(zhuǎn)載于:https://www.cnblogs.com/vir56k/p/3213620.html
總結(jié)
以上是生活随笔為你收集整理的放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS之NSString
- 下一篇: 2013年7月27日杂记