This question is locked. New answers and comments are not allowed.
Hello,
I have to implement horizontal scrollbar dynamically in the chart e.g:(http://demos.telerik.com/silverlight/#Chart/ZoomScroll.).
Here I am defining content of the chart dynamically as shown (code behind).
My code:
Regards,
Gautham
I have to implement horizontal scrollbar dynamically in the chart e.g:(http://demos.telerik.com/silverlight/#Chart/ZoomScroll.).
Here I am defining content of the chart dynamically as shown (code behind).
My code:
using System;using System.Collections.Generic;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using Telerik.Windows.Controls;using Telerik.Windows.Controls.Charting;using System.Collections.ObjectModel;namespace Test_Project{ public partial class MainPage : UserControl { /// <summary> /// The old rad chart /// </summary> private RadChart oldRDChart = null; private List<Series> series = new List<Series>(); private ChartArea chartArea; private RadButton zoomInButton; private RadButton zoomOutButton; public MainPage() { InitializeComponent(); this.XValuePlottingProperty = "ProductName"; series = new List<Series>() { new Series(){ IsChecked = true, PropertyName ="SaleValue" }, new Series(){ IsChecked = true, PropertyName ="ProductQuantity" }, }; CreateChart(); } public void ChartDataBound(object sender, ChartDataBoundEventArgs e) { CanZoomIn(); CanZoomOut(); } private void zoomOutButton_Click(object sender, RoutedEventArgs e) { this.chartArea.ZoomScrollSettingsX.SuspendNotifications(); double zoomCenter = this.chartArea.ZoomScrollSettingsX.RangeStart + (this.chartArea.ZoomScrollSettingsX.Range / 2); double newRange = Math.Min(1, this.chartArea.ZoomScrollSettingsX.Range) * 2; if (zoomCenter + (newRange / 2) > 1) zoomCenter = 1 - (newRange / 2); else if (zoomCenter - (newRange / 2) < 0) zoomCenter = newRange / 2; this.chartArea.ZoomScrollSettingsX.RangeStart = Math.Max(0, zoomCenter - newRange / 2); this.chartArea.ZoomScrollSettingsX.RangeEnd = Math.Min(1, zoomCenter + newRange / 2); this.chartArea.ZoomScrollSettingsX.ResumeNotifications(); this.zoomInButton.IsEnabled = CanZoomIn(); this.zoomOutButton.IsEnabled = CanZoomOut(); } private void zoomInButton_Click(object sender, RoutedEventArgs e) { this.chartArea.ZoomScrollSettingsX.SuspendNotifications(); double zoomCenter = this.chartArea.ZoomScrollSettingsX.RangeStart + (this.chartArea.ZoomScrollSettingsX.Range / 2); double newRange = Math.Max(this.chartArea.ZoomScrollSettingsX.MinZoomRange, this.chartArea.ZoomScrollSettingsX.Range) / 2; this.chartArea.ZoomScrollSettingsX.RangeStart = Math.Max(0, zoomCenter - (newRange / 2)); this.chartArea.ZoomScrollSettingsX.RangeEnd = Math.Min(1, zoomCenter + (newRange / 2)); this.chartArea.ZoomScrollSettingsX.ResumeNotifications(); this.zoomInButton.IsEnabled = CanZoomIn(); this.zoomOutButton.IsEnabled = CanZoomOut(); } public bool CanZoomIn() { if (this.chartArea == null) return false; return this.chartArea.ZoomScrollSettingsX.Range > this.chartArea.ZoomScrollSettingsX.MinZoomRange; } public bool CanZoomOut() { if (this.chartArea == null) return false; return this.chartArea.ZoomScrollSettingsX.Range < 1d; } public void CreateChart() { if (this.oldRDChart != null) { radChartViewRegion.Children.Remove(this.oldRDChart); } this.oldRDChart = new RadChart() { Name = "radChart", UseDefaultLayout = false, }; this.oldRDChart.DefaultView = new ChartDefaultView(); this.oldRDChart.DefaultView.ChartLegend.UseAutoGeneratedItems = true; this.oldRDChart.DataBound += ChartDataBound; radChartViewRegion.Children.Add(this.oldRDChart); #region definecontent Grid innerGrid = new Grid(); innerGrid.RowDefinitions.Add(new RowDefinition()); innerGrid.RowDefinitions[0].Height = new GridLength(0, GridUnitType.Auto); innerGrid.RowDefinitions.Add(new RowDefinition()); innerGrid.RowDefinitions.Add(new RowDefinition()); innerGrid.RowDefinitions[2].Height = new GridLength(0, GridUnitType.Auto); this.oldRDChart.Content = innerGrid; innerGrid.ColumnDefinitions.Add(new ColumnDefinition()); ChartLegend chartLegend = new ChartLegend(); chartLegend.Name = "legend"; chartLegend.ItemsPanelOrientation = Orientation.Horizontal; chartLegend.BorderThickness = new Thickness(0); chartLegend.Padding = new Thickness(5, 0, 5, 0); chartLegend.Header = ""; Grid.SetRow(chartLegend, 2); innerGrid.Children.Add(chartLegend); chartArea = new ChartArea(); chartArea.Name = "chartArea"; Binding legendBinding = new Binding(); legendBinding.ElementName = "legend"; chartArea.SetBinding(ChartArea.LegendProperty, legendBinding); // chartArea.Legend = chartLegend; chartArea.EnableAnimations = false; chartArea.Padding = new Thickness(5, 10, 20, 10); chartArea.ZoomScrollSettingsX = new ZoomScrollSettings(); chartArea.ZoomScrollSettingsX.ScrollMode = ScrollMode.ScrollAndZoom; chartArea.ZoomScrollSettingsX.MinZoomRange = 0.005; chartArea.AxisY = new AxisY(); chartArea.AxisY.AutoRange = true; //chartArea.AxisX = new AxisX(); //chartArea.AxisX.StepLabelLevelCount = 2; Grid.SetRow(chartArea, 0); Grid.SetRowSpan(chartArea, 2); // innerGrid.Children.Add(chartArea); StackPanel stackPanelWithButton = new StackPanel(); stackPanelWithButton.Margin = new Thickness(0, 10, 15, 5); stackPanelWithButton.HorizontalAlignment = HorizontalAlignment.Right; stackPanelWithButton.Orientation = Orientation.Horizontal; innerGrid.Children.Add(stackPanelWithButton); this.zoomInButton = new RadButton(); zoomInButton.Click += new RoutedEventHandler(zoomInButton_Click); zoomInButton.Margin = new Thickness(5, 0, 5, 0); zoomInButton.Content = " - "; stackPanelWithButton.Children.Add(zoomInButton); this.zoomOutButton = new RadButton(); zoomOutButton.Click += new RoutedEventHandler(zoomOutButton_Click); zoomOutButton.Margin = new Thickness(5, 0, 5, 0); zoomOutButton.Content = " + "; stackPanelWithButton.Children.Add(zoomOutButton); #endregion this.CreateLineChart(); this.oldRDChart.ItemsSource = new ObservableCollection<ProductMaster>() { new ProductMaster() { ProductName = "ABCD123456", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234561", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234562", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234563", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234564", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234565", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234566", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234567", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234568", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234569", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345611", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345612", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345613", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345614", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345615", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345616", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345617", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345618", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345619", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345620", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345621", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345622", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD1234562324", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345625", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345626", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345627", ProductQuantity = 5, SaleValue = 45}, new ProductMaster() { ProductName = "ABCD12345628", ProductQuantity = 5, SaleValue = 45}, }; } /// <summary> /// The XValuePlottingProperty /// </summary> public string XValuePlottingProperty { get; set; } /// <summary> /// Create line chart /// </summary> private void CreateLineChart() { foreach (var eachSeries in series) { if (eachSeries.IsChecked) { SeriesMapping seriesMapping = new SeriesMapping(); seriesMapping.LegendLabel = eachSeries.PropertyName; seriesMapping.SeriesDefinition = new LineSeriesDefinition(); seriesMapping.SeriesDefinition.ShowItemLabels = true; seriesMapping.ItemMappings.Add(new ItemMapping() { //DataPointMember = DataPointMember.XValue, DataPointMember = DataPointMember.XCategory, FieldName = XValuePlottingProperty }); seriesMapping.ItemMappings.Add(new ItemMapping() { DataPointMember = DataPointMember.YValue, FieldName = eachSeries.PropertyName }); this.oldRDChart.SeriesMappings.Add(seriesMapping); } } } } public class Series { public bool IsChecked { get; set; } public string PropertyName { get; set; } } public class ProductMaster { public string ProductName { get; set; } public int SaleValue { get; set; } public int ProductQuantity { get; set; } }}<UserControl x:Class="Test_Project.MainPage" Height="600" Width="600"> <ScrollViewer Grid.Row="1"> <Grid x:Name="radChartViewRegion"/> </ScrollViewer></UserControl>Regards,
Gautham