WPF DevExpress ChartControl

 

 

前端

     <!--完整坐标图-->
                    <dxc:ChartControl  Grid.Row="1" Grid.Column="1"  Name="LbarChart" BorderThickness="0" EnableAnimation="True"  Background="#FF3D6DAF" >
                        <!--鼠标选择后显示的面板-->
                        <dxc:ChartControl.CrosshairOptions>
                            <dxc:CrosshairOptions ShowArgumentLine="True" GroupHeaderPattern="{}时间: {A}">
                                <dxc:CrosshairOptions.CommonLabelPosition>
                                    <dxc:CrosshairFreePosition DockTarget="{Binding ElementName=pane}"/>
                                </dxc:CrosshairOptions.CommonLabelPosition>
                            </dxc:CrosshairOptions>
                        </dxc:ChartControl.CrosshairOptions>
                        <!--坐标图-->
                        <dxc:ChartControl.Diagram  >
                            <dxc:XYDiagram2D LabelsResolveOverlappingMinIndent="2"  x:Name="Ldiagram">

                                <!--整个坐标面板-->
                                <dxc:XYDiagram2D.DefaultPane>
                                    <dxc:Pane x:Name="Lpane"  DomainBrush="#FF3D6DAF" Foreground="White" />

                                </dxc:XYDiagram2D.DefaultPane>
                                <!--Y轴设置-->
                                <dxc:XYDiagram2D.AxisY>
                                    <dxc:AxisY2D GridLinesMinorVisible="True">
                                        <dxc:AxisY2D.Title>
                                            <dxc:AxisTitle Content="温度湿度线性图" />
                                        </dxc:AxisY2D.Title>
                                    </dxc:AxisY2D>
                                </dxc:XYDiagram2D.AxisY>
                                <!--X轴设置-->
                                <dxc:XYDiagram2D.AxisX>
                                    <dxc:AxisX2D GridLinesVisible="True" />
                                </dxc:XYDiagram2D.AxisX>

                                <!--坐标图系列-->
                                <dxc:XYDiagram2D.Series>
                                    <dxc:LineSeries2D x:Name="LBarSideSerie"
                                              DisplayName="温度"
                                              MarkerSize="{Binding ElementName=slMarkerSize, Path=Value}"
                                              MarkerVisible="{Binding ElementName=chbMarkers, Path=IsChecked}"   AnimationAutoStartMode="SetStartState">
                                        <dxc:LineSeries2D.Label>
                                            <dxc:SeriesLabel ConnectorVisible="False"
                                                     ResolveOverlappingMode="Default"        dxc:MarkerSeries2D.Angle="{Binding ElementName=slAngle, Path=Value}"
                                                     Visible="{Binding ElementName=chbVisible, Path=IsChecked}" />
                                        </dxc:LineSeries2D.Label>
                                        <dxc:LineSeries2D.Points>

                                        </dxc:LineSeries2D.Points>
                                    </dxc:LineSeries2D>

                                    <dxc:LineSeries2D x:Name="LBarSideSerie2"
                                              DisplayName="湿度"
                                              MarkerSize="{Binding ElementName=slMarkerSize, Path=Value}"
                                              MarkerVisible="{Binding ElementName=chbMarkers, Path=IsChecked}"   AnimationAutoStartMode="SetStartState">
                                        <dxc:LineSeries2D.Label>
                                            <dxc:SeriesLabel ConnectorVisible="False"
                                                     ResolveOverlappingMode="Default"        dxc:MarkerSeries2D.Angle="{Binding ElementName=slAngle, Path=Value}"
                                                     Visible="{Binding ElementName=chbVisible, Path=IsChecked}" />
                                        </dxc:LineSeries2D.Label>
                                        <dxc:LineSeries2D.Points>

                                        </dxc:LineSeries2D.Points>
                                    </dxc:LineSeries2D>

                                    <dxc:LineSeries2D x:Name="LBarSideSerie3"
                                              DisplayName="压强"
                                              MarkerSize="{Binding ElementName=slMarkerSize, Path=Value}"
                                              MarkerVisible="{Binding ElementName=chbMarkers, Path=IsChecked}"   AnimationAutoStartMode="SetStartState">
                                        <dxc:LineSeries2D.Label>
                                            <dxc:SeriesLabel ConnectorVisible="False"
                                                     ResolveOverlappingMode="Default"        dxc:MarkerSeries2D.Angle="{Binding ElementName=slAngle, Path=Value}"
                                                     Visible="{Binding ElementName=chbVisible, Path=IsChecked}" />
                                        </dxc:LineSeries2D.Label>
                                        <dxc:LineSeries2D.Points>

                                        </dxc:LineSeries2D.Points>
                                    </dxc:LineSeries2D>
                                </dxc:XYDiagram2D.Series>

                            </dxc:XYDiagram2D>
                        </dxc:ChartControl.Diagram>
                        <!--图例-->
                        <dxc:ChartControl.Legend>
                            <dxc:Legend HorizontalPosition="Right" Foreground="White"  Background="{x:Null}" />
                        </dxc:ChartControl.Legend>
                    </dxc:ChartControl>

 后台绑定值

  /// <summary>
        /// 坐标绑值
        /// </summary>
        /// <param name="TempData"></param>
        /// <param name="BarSideSerie"></param>
        /// <param name="diagram"></param>
        /// <param name="Name"></param>
        /// <param name="IsAddSecondaryY">是否添加第二坐标</param>
        public void SetBadingData(ParamVM TempData, LineSeries2D BarSideSerie, XYDiagram2D diagram, string Name, SolidColorBrush _brush, bool IsAddSecondaryY = true)
        {
            try
            {

                List<DevExpress.Xpf.Charts.SeriesPoint> lsBarPoint = new List<DevExpress.Xpf.Charts.SeriesPoint>();  //投入柱形图数据源  
                List<PPPTS> lstPPPTS = new List<PPPTS>();

                #region 温度

                List<DevChartData> lst = new List<DevChartData>();

                lst = TempData.Lst.OrderByDescending(a => a.StartTime).ToList();

                lsBarPoint.Clear();


                List<DevChartData> lst2 = new List<DevChartData>();
                foreach (var item in lst)
                {
                    lst2.Add(item);
                    if (lst2.Count > 100) break;

                }

                lst2 = lst2.OrderBy(a => a.StartTime).ToList();
                foreach (var item in lst2)
                {
                    lsBarPoint.Add(new DevExpress.Xpf.Charts.SeriesPoint() { Argument = DataConvert.GetValDateTime(item.StartTime).ToString("HH:mm"), Value = DataConvert.GetValDouble(item.ProductionLong) });
                }

                BarSideSerie.Points.Clear();
                BarSideSerie.Points.AddRange(lsBarPoint); 
                BarSideSerie.Animate();
                BarSideSerie.ArgumentScaleType = DevExpress.Xpf.Charts.ScaleType.Qualitative;
                BarSideSerie.LabelsVisibility = true;//显示标注标签  
                BarSideSerie.LabelsVisibility = false;//显示标注标签  

                BarSideSerie.Brush = _brush;//暂时不使用

                if (IsAddSecondaryY)
                {

                    #region 是否添加第二坐标

                    SecondaryAxisY2D ys = null;
                    foreach (var item in diagram.SecondaryAxesY)
                    {
                        if (item.Title.Content.ToString() == Name)
                        {
                            ys = item;
                            diagram.SecondaryAxesY.Remove(ys);
                            break;
                        }
                    }

                    SecondaryAxisY2D y1 = new SecondaryAxisY2D();

                    y1.Alignment = AxisAlignment.Near;
                    y1.FontSize = 12;
                    y1.Title = new AxisTitle() { Content = Name };
                    y1.Title.Foreground = _brush;
                    y1.Title.FontSize = 12;
                    y1.Title.Alignment = TitleAlignment.Far; //顶部对齐
                    y1.Range = new AxisRange() { MaxValue = DataConvert.GetValDouble(TempData.theMax) * (1.2), MinValue = DataConvert.GetValDouble(TempData.theMin) * (0.8) };  
                    y1.Brush = _brush;
                    y1.FontSize = 12;





                    y1.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 
                    y1.FontSize = 12;
                    y1.OpacityMask = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF;    
                    //AxisY.Visible = false;
                    y1.Brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 
                    y1.Label = new AxisLabel();
                    y1.Label.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 

                    y1.Title.Visible = true;
                    y1.Visible = false;

                    diagram.SecondaryAxesY.Add(y1);
                    XYDiagram2D.SetSeriesAxisY(BarSideSerie, y1);
                    #endregion


                }
                else
                {
                    AxisY2D AxisY = ((DevExpress.Xpf.Charts.XYDiagram2D)diagram).ActualAxisY;
                    DevExpress.Xpf.Charts.AxisRange _Range = new DevExpress.Xpf.Charts.AxisRange() { MaxValue = DataConvert.GetValDouble(TempData.theMax) * (1.2), MinValue = DataConvert.GetValDouble(TempData.theMin) * (0.8) };
                    AxisY.Range = _Range;

                   

                    AxisY.Title = new AxisTitle() { Content = Name };
                    AxisY.Title.FontSize = 12;
                    AxisY.Title.Alignment = TitleAlignment.Far; //顶部对齐 
                    AxisY.Title.Foreground = _brush;  

                     
                    AxisY.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 
                    AxisY.FontSize = 12; 
                    AxisY.OpacityMask = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF;    
                    AxisY.Brush = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 
                    AxisY.Label = new AxisLabel();
                    AxisY.Label.Foreground = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFF"));//0000FF; 

                    AxisY.Title.Visible =  false;
                    AxisY.Visible = true;
                };

                #endregion
            }
            catch (Exception)
            {

                throw;
            }
        }

 

posted @ 2021-01-13 11:48  人生为卒  阅读(780)  评论(0编辑  收藏  举报