背景
Echarts 是百度推出的一個使用 JavaScript 實現的開源可視化庫。 該庫提供了常規的折線圖、柱狀圖、散點圖、餅圖、K線圖,用於統計的盒形圖,用於地理數據可視化的地圖、熱力圖、線圖,用於關系數據可視化的關系圖、treemap、旭日圖,多維數據可視化的平行坐標,還有用於 BI 的漏斗圖,儀表盤,並且支持圖與圖之間的混搭。




既然 Echarts
提供了豐富的圖形,所以咱們有必要把它封裝起來,以便讓其支持 Windows 窗體應用程序。
技術分析
整體的技術方案就是做一個自定義控件,該控件中包含 WebBrowser 瀏覽器控件,通過該瀏覽器控件顯示指定位置的網頁。就像咱們直接通過 Web 瀏覽器網頁一樣。具體的步驟如下:
首先,創建一個在 Windows 窗體應用程序中使用的控件項目 LSGO.Core.ECharts
。
其次,在該控件項目的設計器中,拖入一個 WebBrowser 控件,並設置其 Dock
屬性為 Fill
,即讓 WebBrowser 充滿整個容器。
接着,寫一個 InitialECharts
方法,加載指定目錄的網頁.\assets\echarts.html
,讓該網頁在 WebBrowser 中打開。
當該網頁加載完成后,觸發 WebBrowser 的 WebBrowserDocumentCompletedEventHandler
事件,在該事件注冊的方法中調用該網頁中用 JS 寫的 showChart
方法,則在該網頁中顯示圖形。
當窗體控件的尺寸發生變化后,觸發 WebBrowser 的 SizeChanged
事件,在該事件注冊的方法中調用該網頁中用 JS 寫的 setPosition
方法,則重新調整顯示圖形的布局,以滿足新的尺寸。
WebBrowser
類的常用屬性、事件與方法。
<u>屬性</u>
/// <summary> /// 獲取或設置一個對象,該對象可由顯示在 WebBrowser 控件中的網頁所包含的腳本代碼訪問。 /// </summary> /// <returns> /// 可用於腳本代碼的對象。 /// </returns> public object ObjectForScripting { get; set; } /// <returns> /// 表示當前頁的 HtmlDocument,如果未加載任何頁,則為 null。 /// </returns> public HtmlDocument Document { get; }
<u>事件</u>
/// <summary> /// 在 WebBrowser 控件完成加載文檔時發生。 /// </summary> public event WebBrowserDocumentCompletedEventHandler DocumentCompleted; /// <summary> /// 在 Control.Size 屬性值更改時發生。 /// </summary> public event EventHandler SizeChanged;
<u>方法</u>
/// <summary> /// 將指定的統一資源定位器 (URL) 處的文檔加載到 WebBrowser 控件中,替換上一個文檔。 /// </summary> /// <param name="urlString">要加載的文檔的 URL。</param> public void Navigate(string urlString);
HtmlDocument
類的常用方法。
/// <returns> /// 活動腳本調用所返回的對象。 /// </returns> /// <param name="scriptName">要調用的腳本方法的名稱。</param> /// <param name="args">要傳遞給腳本方法的參數。</param> public object InvokeScript(string scriptName, object[] args);
代碼實現
Step1:創建一個用於顯示圖形的網頁。
<u>初始顯示的網頁 echarts.html
</u>
<!DOCTYPE html> <html lang="en-US"> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css" /> <script src="./jquery-1.11.2.min.js"></script> <script src="./bootstrap/js/bootstrap.min.js"></script> <script src="./json2.js"></script> <head> <title></title> </head> <body> <div class="container-fluid"> <div id="main" style="height:350px;"></div> </div> <script src="./echarts.js"></script> <script> var myChart = echarts.init(document.getElementById('main')); // 指定圖表的配置項和數據 var option = { title: { text: 'ECharts 入門示例' }, tooltip: {}, legend: { data:['銷量'] }, xAxis: { data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"] }, yAxis: {}, series: [{ name: '銷量', type: 'bar', data: