放棄winform的窗體吧,改用html作界面,桌面應用程序UI的新的開發方式。


做過很多winform項目,都為winform控件頭疼不已。想實現一些漂亮的樣子總是很難。我這里列舉幾個缺點:

1.winform控件大多是 絕對布局 ,你需要給出准確的坐標。那么在實現居中效果就會很難。

2.學習成本,也了解各個控件的結構,屬性等。要想更熟練的掌握需要很多時間。

3.實現界面的成本,調整各個窗體,控件的樣式到原型圖的效果要用很長時間。

4.維護,需要懂得WINFROM的程序員來進行維護。

 

先想到這么多.我接觸android后,發現android實現UI的方式很有意思,使用xml描述視圖,使用window包裹activity實現各個窗口。那我們能不能把這樣的形式在桌面應用開發上使用?於是在新項目中,我開始啟用新的開發方式:

1.寫一個html描述UI,類似android里的layout布局文件。

2.准備一個form窗體作為承載,在這個窗體里放置一個webbrowser控件作為顯示控件,那么這個控件可以直接顯示html

3.為webbrowser控件指定 ObjectForScripting 對象,一般情況下這個對象是個c#實現的class的實例。這個對象實現了 可以和webbrowser控件里的html實現的dom模型交互。它提供了一個通道,可以再這個ObjectForScripting對象里調用javascript和使用javascript調用這個對象里的方法。

基於以上的方式我實現了一個簡單的框架。

1.寫一個基本的ControlSupport,它是所有可以作為ObjectForScripting 對象的基類。用於和html交互。

2.在ControlSupport中必須實現oncreate方法,他會在創建時加載。

3.為ControlSupport實現SetContentUrl方法,指定一個本地的html文件給webbrowser控件,那么就可以顯示它。

4.為ControlSupport實現InvokeScript方法,在這里可以調用js中的方法。

5.在js中,可以通過下面的方法調用 ControlSupport里的方法。

 if (typeof window.external.getMaterialList != "undefined") {
                //觸發瀏覽器的 后台方法,這個方法只在我們的winform程序發生
                window.external.getMaterialList(callback_getMaterialList);
            }

6.通過上面的實現,那么ControlSupport類看起來就像個 activity(android里的頁面),我還實現了一個棧,頁面顯示時,將是位於棧頂的。那么借助這個堆棧的能力,我們可以實現窗體的跳轉和返回。

 

通過以上的方式。我們基本可以完成使用html來做頁面的操作。效果非常的爽,終於可以擺脫winform控件的。實現各種表現方式都非常的簡單。HTML嘛,更加的靈活。

 貼個圖吧。下面這個界面就是用這種方式實現的,僅僅頂部是用winform控件實現的。左側的導航和右下側的內容區都是用html來做的頁面。效果看起來完全是一個整體。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM