WPF编程,telerik控件制作曲线图的一种方法

Telerik是一个强大的WPF第三方控件库,这里给出的相关设置代码事例适用于早期版本的Telerik,仅做为一某些情况下的参考。直接复制可能因为版本的问题报错。

1、引用DLL

Telerik.Windows.Controls.Charting.dll,

Telerik.Windows.Controls.dll

Telerik.Windows.Data.dll.

2、前台

        <telerikChart:RadChart x:Name="radChart"
                               Grid.Row="1"
                               d:LayoutOverrides="Width, Height">
            <telerikChart:RadChart.DefaultView>
                <telerikChart:ChartDefaultView>
                    <telerikChart:ChartDefaultView.ChartTitle>
                        <telerikChart:ChartTitle Content="标题"
                                                 HorizontalAlignment="Stretch" />
                    </telerikChart:ChartDefaultView.ChartTitle>
 
                </telerikChart:ChartDefaultView>
            </telerikChart:RadChart.DefaultView>
        </telerikChart:RadChart>

 3、后台

               private void Button_Click(object sender, RoutedEventArgs e)
        {
            //标题
            radChart.DefaultView.ChartTitle.Content = "Year 2009";
            //线段说明
            radChart.DefaultView.ChartLegend.Header = "线段说明";
            radChart.DefaultView.ChartLegend.UseAutoGeneratedItems = true;
            radChart.DefaultView.ChartLegendPosition = Dock.Right;
            //X轴,标题,范围,步距,样式
            radChart.DefaultView.ChartArea.AxisX.Title = "X轴标题";
            radChart.DefaultView.ChartArea.AxisX.AutoRange = true;
            radChart.DefaultView.ChartArea.AxisX.LabelRotationAngle = 45;//角度可为负,-90为竖直
            radChart.DefaultView.ChartArea.AxisX.Step = 1;
            radChart.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside;
            //Y轴,标题,范围,步距,样式
            radChart.DefaultView.ChartArea.AxisY.Title = "Y轴标题";
            // radChart.DefaultView.ChartArea.AxisY.DefaultLabelFormat = "#VAL{C0}";//Y轴的刻度数值显示,#%{p}是百分号,C4,小数点后四位


            radChart.DefaultView.ChartArea.NoDataString = "没有数据";

            radChart.DefaultView.ChartArea.ItemClick += new EventHandler<ChartItemClickEventArgs>(ChartArea_ItemClick);//点击数值点时,触发ChartArea_ItemClick事件。

            //将数值Quantity按照降序排列。
            ChartSortDescriptor descriptor = new ChartSortDescriptor();
            descriptor.Member = "Quantity";
            descriptor.SortDirection = ListSortDirection.Ascending;
            radChart.SortDescriptors.Add(descriptor);

            //条件筛选,指定数值列,指定条件,指定用于筛选比较的值。
            ChartFilterDescriptor descriptor = new ChartFilterDescriptor();
            descriptor.Member = "Quantity";
            descriptor.Operator = FilterOperator.IsLessThanOrEqualTo;
            descriptor.Value = 150;
            this.radChart.FilterDescriptors.Add( descriptor );


        //缩放功能,第一个参数指调整的最小刻度值,0到1之间,第二个,第三个是初始放大的区域,也是小数,可不设置,默认全显。第四个是模式。
            this.radChart.DefaultView.ChartArea.ZoomScrollSettingsX.MinZoomRange = 0.2;
            this.radChart.DefaultView.ChartArea.ZoomScrollSettingsX.RangeStart = 0.2;
            this.radChart.DefaultView.ChartArea.ZoomScrollSettingsX.RangeEnd = 0.8;
            this.radChart.DefaultView.ChartArea.ZoomScrollSettingsX.ScrollMode = ScrollMode.ScrollAndZoom;


            #region 折线
            SeriesMapping seriesMapping = new SeriesMapping();
            seriesMapping.LegendLabel = "线条1";
            
            //标签样式定义。
            LabelSettings settings = new LabelSettings(); //实例化样式
            settings.Distance = 10;//标签距离点10
            settings.ShowConnectors = true;//标签与点之间显示线
            SplineSeriesDefinition lineSeries = new SplineSeriesDefinition();//实例化线型
            lineSeries.LabelSettings = settings;
            seriesMapping.SeriesDefinition = lineSeries;//关键点在这里,需要将自定义的标签样式给到当前的线型。
            radChart.DefaultView.ChartArea.SmartLabelsEnabled = true;
            //seriesMapping.SeriesDefinition = new SplineSeriesDefinition();//一般情况下这样直接指定线开,用其默认的标签类型。


          
            //X轴绑定值
            seriesMapping.ItemMappings.Add(new ItemMapping("Month", DataPointMember.XValue));
            // seriesMapping.SeriesDefinition.ItemLabelFormat = "#Y{C0}";//曲线上Y值的显示    
            //Y轴绑定值
            seriesMapping.ItemMappings.Add(new ItemMapping("Quantity", DataPointMember.YValue));
            //X轴显示名称
            seriesMapping.ItemMappings.Add(new ItemMapping("MonthName", DataPointMember.XCategory));

             seriesMapping.SeriesDefinition.ShowItemToolTips = true;//提示信息需要手动开启
            seriesMapping.SeriesDefinition.ItemToolTipFormat = "注释1: #XCAT\n注释2: #HIGH";//#XCAT与下文中的XCategory对应,#Y与YValue对应,用 \n 换行
                
            //seriesMapping.ItemMappings.Add(new ItemMapping("MonthName", DataPointMember.Tooltip));//直接绑定提示信息,只显示数值,不能自定义格式。

            radChart.SeriesMappings.Add(seriesMapping);
            radChart.ItemsSource = this.CreateData();
         }

   //点击数值点时触发的事件
   private void ChartArea_ItemClick(object sender, ChartItemClickEventArgs e)
        {
            //窗口格式化显示
            ProductSales td = e.DataPoint.DataItem as ProductSales;
            MessageBox.Show(string.Format(
                "点的数值 {0:d}:\n\n数值二\t: {1:c}\n", td.Month, td.Quantity), td.MonthName, MessageBoxButton.OK);
              //导出为EXCEL  
            SaveFileDialog dialog = new SaveFileDialog();
            dialog.DefaultExt = "*.xls";
            dialog.Filter = "Files(*.xls)|*.xls";
            if (!(bool)dialog.ShowDialog())
                return;
            Stream fileStream = dialog.OpenFile();
            radChart.ExportToExcelML(fileStream);
            fileStream.Close();
        }


        private List<ProductSales> CreateData()
        {
            List<ProductSales> persons = new List<ProductSales>();
            persons.Add(new ProductSales(154, 1, "January"));
            persons.Add(new ProductSales(138, 2, "February"));
            persons.Add(new ProductSales(143, 3, "March"));
            persons.Add(new ProductSales(120, 4, "April"));
            persons.Add(new ProductSales(135, 5, "May"));
            persons.Add(new ProductSales(125, 6, "June"));
            persons.Add(new ProductSales(179, 7, "July"));
            persons.Add(new ProductSales(170, 8, "August"));
            persons.Add(new ProductSales(198, 9, "September"));
            persons.Add(new ProductSales(187, 10, "October"));
            persons.Add(new ProductSales(193, 11, "November"));
            persons.Add(new ProductSales(212, 12, "December"));
            return persons;
        }

猜你喜欢

转载自blog.csdn.net/qq_43307934/article/details/93606151