通过前面基础篇一介绍后,我想大家应该对visifire有了一定的了解了吧,下面在给大家看一个visifire的效果图吧,如图所以:
这个效果是不是挺炫,想要实现这样的效果吗,哈哈,下面我就废话不多说了,直接上代码:
第一步:前台代码
<Grid x:Name="LayoutRoot" HorizontalAlignment="Center" VerticalAlignment="Center"> <StackPanel Background="White"> <!--第一个图表--> <vc:Chart CornerRadius="10,10,0,0" BorderThickness="0,1,1,0" Margin="0,0,0,0" Padding="5,5,5,20" HorizontalAlignment="Left" VerticalAlignment="Top" Theme="Theme1" Background="#FFF8F4FF" ShadowEnabled="True" x:Name="Chart1" Width="679" Height="200" ScrollingEnabled="false"> <vc:Chart.Titles> <vc:Title BorderThickness="1" Margin="0,0,0,5" ShadowEnabled="True" Padding="5" CornerRadius="4" FontSize="12" Text="Interaction between two separate charts"> <vc:Title.Background> <LinearGradientBrush> <GradientStop Color="White" Offset="0"></GradientStop> <GradientStop Color="White" Offset="1"></GradientStop> </LinearGradientBrush> </vc:Title.Background> </vc:Title> </vc:Chart.Titles> <vc:Chart.TrendLines> <vc:TrendLine Opacity="0.1" LineColor="Red" Orientation="Vertical" StartValue="1" EndValue="10"/> <vc:TrendLine Opacity="0.1" LineColor="Green" Orientation="Vertical" StartValue="11" EndValue="20"/> <vc:TrendLine Opacity="0.1" LineColor="Blue" Orientation="Vertical" StartValue="21" EndValue="30"/> </vc:Chart.TrendLines> <vc:Chart.AxesX> <vc:Axis AxisMaximum="31" StartFromZero="true" IncludeZero="False" Enabled="false" Interval="2" LineThickness="0"> <vc:Axis.Grids> <vc:ChartGrid Opacity="0.2" Interval="0.5"></vc:ChartGrid> </vc:Axis.Grids> </vc:Axis> </vc:Chart.AxesX> <vc:Chart.AxesY> <vc:Axis LineThickness="0" TitleFontWeight = "Light" Title="Y-Axis" TitleFontSize = "12" > <vc:Axis.Grids> <vc:ChartGrid Opacity="0.2" Interval="2" ></vc:ChartGrid> </vc:Axis.Grids> </vc:Axis> </vc:Chart.AxesY> <vc:Chart.PlotArea> <vc:PlotArea BorderBrush="#002147" BorderThickness="0" ShadowEnabled="false" > <vc:PlotArea.Background> <LinearGradientBrush> <GradientStop Color="White" Offset="0"></GradientStop> <GradientStop Color="White" Offset="1"></GradientStop> </LinearGradientBrush> </vc:PlotArea.Background> </vc:PlotArea> </vc:Chart.PlotArea> </vc:Chart> <!--第二个图表--> <vc:Chart CornerRadius="10,0,10,10" BorderThickness="1,0,1,0" Padding="5,5,5,5" HorizontalAlignment="Left" VerticalAlignment="Top" Theme="Theme1" Background="#FFF8F4FF" ShadowEnabled="True" x:Name="Chart2" Width="680" Height="200" ScrollingEnabled="false"> <vc:Chart.TrendLines> <vc:TrendLine Opacity="0.1" LineColor="Red" Orientation="Vertical" StartValue="1" EndValue="10"/> <vc:TrendLine Opacity="0.1" LineColor="Green" Orientation="Vertical" StartValue="11" EndValue="20"/> <vc:TrendLine Opacity="0.1" LineColor="Blue" Orientation="Vertical" StartValue="21" EndValue="30"/> </vc:Chart.TrendLines> <vc:Chart.AxesX> <vc:Axis StartFromZero="true" AxisMaximum="31" IncludeZero="False" Interval="1" LineThickness="1" LineColor="Black" Title="Groups" TitleFontSize="14" > <vc:Axis.Grids> <vc:ChartGrid Opacity="0.2" Interval="0.5"></vc:ChartGrid> </vc:Axis.Grids> <vc:Axis.AxisLabels> <vc:AxisLabels ></vc:AxisLabels> </vc:Axis.AxisLabels> <!--<vc:Axis.CustomAxisLabels> <vc:CustomAxisLabels FontSize="12"> <vc:CustomAxisLabels.Labels> <vc:CustomAxisLabel Text="Group1" From="1" To="10"/> <vc:CustomAxisLabel Text="Group2" From="11" To="20"/> <vc:CustomAxisLabel Text="Group3" From="21" To="30"/> </vc:CustomAxisLabels.Labels> </vc:CustomAxisLabels> </vc:Axis.CustomAxisLabels>--> </vc:Axis> </vc:Chart.AxesX> <vc:Chart.AxesY> <vc:Axis LineThickness="0" TitleFontWeight = "Light" Title="Remarks" TitleFontSize = "14" > <vc:Axis.Grids> <vc:ChartGrid Opacity="0.2" Interval="2" ></vc:ChartGrid> </vc:Axis.Grids> <!--<vc:Axis.CustomAxisLabels> <vc:CustomAxisLabels FontSize="10"> <vc:CustomAxisLabels.Labels> <vc:CustomAxisLabel Text="Poor" From="20" To="20"/> <vc:CustomAxisLabel Text="Average" From="40" To="40"/> <vc:CustomAxisLabel Text="Good" From="50" To="68"/> <vc:CustomAxisLabel Text="VeryGood" From="70" To="80"/> <vc:CustomAxisLabel Text="Excellent" From="82" To="100"/> </vc:CustomAxisLabels.Labels> </vc:CustomAxisLabels> </vc:Axis.CustomAxisLabels>--> </vc:Axis> </vc:Chart.AxesY> <vc:Chart.PlotArea> <vc:PlotArea BorderBrush="#002147" BorderThickness="0" ShadowEnabled="false" > <vc:PlotArea.Background> <LinearGradientBrush> <GradientStop Color="White" Offset="0"></GradientStop> <GradientStop Color="White" Offset="1"></GradientStop> </LinearGradientBrush> </vc:PlotArea.Background> </vc:PlotArea> </vc:Chart.PlotArea> </vc:Chart> </StackPanel> </Grid>
第二步:后台代码:
1.create chart:在后台创建chart
#region Create a chart public void CreateMyChart(DataTable dtChart, Chart chart, RenderAs renderAs, Double opacity) { //绑定Chart chart.Series.Clear(); chart.Titles.Clear(); chart.ScrollingEnabled = false; chart.AnimationEnabled = true; chart.ThemeEnabled = true; chart.View3D = true; DataSeries dataSeries = new DataSeries(); //Chart的实例这是以饼图显示 // Set DataSeries property dataSeries.RenderAs = renderAs; dataSeries.Opacity = opacity; dataSeries.Bevel = false; dataSeries.MarkerType = Visifire.Commons.MarkerTypes.Triangle; DataPoint datapoint; for (int i = 0; i < dtChart.Rows.Count; i++) { datapoint = new DataPoint(); if (renderAs == RenderAs.Line) { datapoint.MarkerEnabled = true; datapoint.MarkerSize = 8; datapoint.MarkerColor = datapoint.Color; } datapoint.AxisXLabel = dtChart.Rows[i]["job_id"].ToString(); datapoint.YValue = Convert.ToDouble(dtChart.Rows[i]["max_lvl"].ToString()); dataSeries.DataPoints.Add(datapoint); } //绑定当鼠标放上去显示的信息 dataSeries.LabelText = "#AxisXLabel, #YValue"; chart.Series.Add(dataSeries); Title title = new Title(); title.Text = "某某医院..."; chart.Titles.Add(title); chart.IndicatorEnabled = true; chart.ShadowEnabled = true; } #endregion
2.load :加载时需要绑定chart,以及Plotarea的实现
View Code
public VisifireWindow2() { InitializeComponent(); DataSet ds = DBSQLHelper.Search("select * from jobs", null, CommandType.Text); CreateMyChart(ds.Tables[0], Chart1, RenderAs.Line, 1); CreateMyChart(ds.Tables[0], Chart2, RenderAs.Column, 1); Chart1.PlotArea.MouseMove += new EventHandler<PlotAreaMouseEventArgs>(PlotArea_MouseMove); Chart1.PlotArea.MouseLeave += new EventHandler<MouseEventArgs>(PlotArea_MouseLeave); Chart2.PlotArea.MouseMove += new EventHandler<PlotAreaMouseEventArgs>(PlotArea2_MouseMove); Chart2.PlotArea.MouseLeave += new EventHandler<MouseEventArgs>(PlotArea2_MouseLeave); }
3.plotarea:两个chart,mousemove和mouseleave事件的实现效果的关键代码
#region Chart2'PlotArea /// <summary> /// MouseMove event handler, it will enabled ShowIndicator for Chart1 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void PlotArea2_MouseMove(object sender, PlotAreaMouseEventArgs e) { Chart1.ShowIndicator(e.XValue, e.YValue); } /// <summary> /// MouseLeave event handler, it will disabled ShowIndicator for Chart1 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void PlotArea2_MouseLeave(object sender, MouseEventArgs e) { Chart1.HideIndicator(); } #endregion #region Chart1'PlotArea /// <summary> /// MouseMove event handler, it will enabled ShowIndicator for Chart2 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void PlotArea_MouseMove(object sender, PlotAreaMouseEventArgs e) { Chart2.ShowIndicator(e.XValue, e.YValue); } /// <summary> /// MouseLeave event handler, it will disabled ShowIndicator for Chart2 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void PlotArea_MouseLeave(object sender, MouseEventArgs e) { Chart2.HideIndicator(); } #endregion
哈哈哈,这样就可以了,麻烦大家多提提意见哦!