客戶端上嵌入網頁是常有的事,本文主要介紹Wpf嵌入Echart,並且封裝成控件,可以用MVVM方式調用。(有位仁兄講的好,控件內部怎么寫都可以,但是用起來要方便)
老規矩,先上源碼地址:https://gitee.com/akwkevin/aistudio.-wpf.-echarts
再來幾張效果圖:


暫時只做了這四種類型,下面為以線條圖為例簡單介紹一下。
html網頁代碼如下,script里的函數是能被客戶端直接調用的,其中jsSetSize是在客戶端放大縮小的時候同步改變Echart的大小。
<!DOCTYPE html>
<html lang="zh-cn" xmlns="http://www.w3.org/1999/xhtml">
<!-- saved from url=(0013)about:internet -->
<head>
<meta charset="utf-8" http-equiv="X-UA-Compatible" content="IE=5,6,7,8,9,10,11, chrome=1" />
<title>ECharts</title>
<style>
#main {
width: 97%;
height: 97%;
position: absolute;
}
</style>
</head>
<body>
<div id="main" />
<script src="echarts.js"></script>
<script>
myChart = echarts.init(document.getElementById('main'));
option = {
xAxis: {
type: 'category',
data: []
},
yAxis: {
type: 'value'
},
series: [{
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}, {
data: [],
type: 'line',
smooth: true
}
]
};
myChart.setOption(option);
function jsShowHide(info) {
if (info == 0) {
myChart.clear();
}
else {
myChart.setOption(option);
}
}
function jsPushData(x, y, index) {
option.xAxis.data.push(x);
option.series[index].data.push(y);
myChart.setOption(option);
}
function jsPushXData(x) {
option.xAxis.data.push(x);
myChart.setOption(option);
}
function jsPushYData(y, index) {
option.series[index].data.push(y);
myChart.setOption(option);
}
function jsShiftData(x, y, index) {
option.xAxis.data.shift();
option.series[index].data.shift();
myChart.setOption(option);
}
function jsShiftXData(x) {
option.xAxis.data.shift();
myChart.setOption(option);
}
function jsShiftYData(y, index) {
option.series[index].data.shift();
myChart.setOption(option);
}
function jsSetDatas(xArray, yArray, index) {
option.xAxis.data = JSON.parse(xArray);
option.series[index].data = JSON.parse(yArray);
myChart.setOption(option);
}
function jsSetXDatas(xArray) {
option.xAxis.data = JSON.parse(xArray);
myChart.setOption(option);
}
function jsSetYDatas(yArray, type, index) {
option.series[index].data = JSON.parse(yArray);
option.series[index].type = type;
myChart.setOption(option);
}
function jsSetSmooth(smooth, index) {
option.series[index].smooth = smooth;
myChart.setOption(option);
}
function jsSetSize(x, y) {
var main = document.getElementById('main')
main.style.width = x + "px"
main.style.height = y + "px"
myChart.resize({ width: x, height: y });
}
function click1() {
//var main = document.getElementById('main')
//main.style.width = "500px"
//main.style.height = "500px"
//myChart.resize({ height: 500, width:500 });
window.external.ShowMsg("這是一條信息,來自js,調用了C#");
}
</script>
</body>
</html>
XAML的代碼就是一個 WebBrowser 控件,用來顯示html網頁
<WebBrowser Name="Web"></WebBrowser>
C#調用的關鍵代碼
Web.InvokeScript("jsSetSize", (int)(this.ActualWidth * 0.97), (int)(this.ActualHeight * 0.97));//設置echart大小 Web.InvokeScript("jsSetXDatas", Newtonsoft.Json.JsonConvert.SerializeObject(Labels.Labels));//設置橫坐標的數據 Web.InvokeScript("jsSetYDatas", Newtonsoft.Json.JsonConvert.SerializeObject(values.Values), values.Type, ValuesCollection.IndexOf(values));//設置縱坐標的數據
控件封裝好了,現在就是調用了Labels綁定橫坐標數據,ValuesCollection綁定縱坐標數據。
<controls:LineEchart Labels="{Binding Labels}" ValuesCollection="{Binding ValuesCollection}"/>
是不是非常簡單,輕松MVVM使用。
整個東西還是相對比較簡單,歡迎大家下載源碼。
