Hello,
I am attempting to use the CandleStick control to display a Box Plox that includes the median value. The example found at the link below indicates this should be possible but I am seeing the same behavior as the comment indicates, the custom line is drawn correctly but all of the CandleStick elements are not visible. The PART_CenterRectangle is the correct size but has an opacity of 0 while the Upper and Lower line elements simply do not seem to be sized correctly.
http://blogs.telerik.com/blogs/posts/11-04-21/how-to-create-scatter-error-bars-and-box-plot-series-with-radchart-for-sl-wpf.aspx
I have successfully created a custom 'Series' type that works as long as CreateChartItem() returns a CandleStick object, but as soon as CreateChartItem() creates any type that extends CandleStick (even if that class is completely empty) the CandleStick visuals do not appear. Thanks,
Jason
I am attempting to use the CandleStick control to display a Box Plox that includes the median value. The example found at the link below indicates this should be possible but I am seeing the same behavior as the comment indicates, the custom line is drawn correctly but all of the CandleStick elements are not visible. The PART_CenterRectangle is the correct size but has an opacity of 0 while the Upper and Lower line elements simply do not seem to be sized correctly.
http://blogs.telerik.com/blogs/posts/11-04-21/how-to-create-scatter-error-bars-and-box-plot-series-with-radchart-for-sl-wpf.aspx
I have successfully created a custom 'Series' type that works as long as CreateChartItem() returns a CandleStick object, but as soon as CreateChartItem() creates any type that extends CandleStick (even if that class is completely empty) the CandleStick visuals do not appear. Thanks,
Jason
2 Answers, 1 is accepted
0
Jason
Top achievements
Rank 1
answered on 06 Jun 2012, 01:21 PM
I wrote up a small test app that shows the behavior I am seeing.The Telerik DLLs I am referencing all appear to be version 2011.3.1116.40. Below are screenshots of the behavior I am seeing as well as the code I am using.
BoxPlotVsCandleStickScreenshot.png - A screenshot of the running application. The custom box-plot is shown on the left, the standard candlestick shown on the right.
BoxPlotVsCandleStickSnoop.png - A screenshot taking of the Snoop Zoomer feature that shows that the center rectange does exist.
MainWindow.xaml
<Window x:Class="BoxPlotApp.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" xmlns:mscorlib="clr-namespace:System;assembly=mscorlib" Title="MainWindow" Height="350" Width="525"> <Grid x:Name="LayoutRoot"> <Grid.Resources> <mscorlib:Double x:Key="StickLineStrokeThickness">2</mscorlib:Double> <mscorlib:Double x:Key="CandleStickLineStrokeThickness">2</mscorlib:Double> <mscorlib:Double x:Key="CandleRadiusX">1</mscorlib:Double> <mscorlib:Double x:Key="CandleRadiusY">1</mscorlib:Double> <SolidColorBrush x:Key="CandleStickEmptyRectangleFill" Color="#07000000" /> <Style x:Key="CustomCandleStickStyle" TargetType="telerik:CandleStick"> <Setter Property="EmptyFill" Value="{StaticResource CandleStickEmptyRectangleFill}"/> <Setter Property="RadiusX" Value="{StaticResource CandleRadiusX}" /> <Setter Property="RadiusY" Value="{StaticResource CandleRadiusY}" /> <Setter Property="LineThickness" Value="{StaticResource CandleStickLineStrokeThickness}" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="telerik:CandleStick"> <Canvas x:Name="PART_MainContainer"> <telerik:ParametricLine x:Name="PART_UpperLine" LineStyle="{TemplateBinding ItemStyle}" StrokeThickness="{TemplateBinding LineThickness}" /> <telerik:ParametricLine x:Name="PART_LowerLine" LineStyle="{TemplateBinding ItemStyle}" StrokeThickness="{TemplateBinding LineThickness}" /> <Rectangle x:Name="PART_CenterRectangle" Height="{TemplateBinding CandleHeight}" Canvas.Top="{TemplateBinding MinYValue}" Style="{TemplateBinding ItemStyle}" RadiusX="{TemplateBinding RadiusX}" RadiusY="{TemplateBinding RadiusY}" /> <telerik:ParametricLine x:Name="PART_DojiLine" Visibility="{TemplateBinding DojiLineVisibility}" LineStyle="{TemplateBinding ItemStyle}" StrokeThickness="{TemplateBinding LineThickness}" /> <telerik:ParametricLine x:Name="PART_CustomLine" LineStyle="{TemplateBinding ItemStyle}" StrokeThickness="{TemplateBinding LineThickness}" /> </Canvas> </ControlTemplate> </Setter.Value> </Setter> </Style> </Grid.Resources> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <telerik:RadChart x:Name="RadChart1" /> <telerik:RadChart x:Name="RadChart2" Grid.Column="1" /> </Grid></Window>MainWindow.xaml.cs
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using Telerik.Windows.Controls.Charting;namespace BoxPlotApp{ /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); _InitializeBoxPlot(); _InitializeCandleStick(); } private void _InitializeBoxPlot() { DataSeries series = new DataSeries(); series.Definition = new CustomCandleStickSeriesDefinition() { ItemStyle = this.LayoutRoot.Resources["CustomCandleStickStyle"] as Style }; series.Add(new DataPoint() { Open = 10, High = 30, Low = 5, Close = 15 }); series.Add(new DataPoint() { Open = 15, High = 40, Low = 10, Close = 20 }); series.Add(new DataPoint() { Open = 20, High = 35, Low = 15, Close = 30 }); series.Add(new DataPoint() { Open = 10, High = 25, Low = 5, Close = 18 }); series.Add(new DataPoint() { Open = 15, High = 40, Low = 10, Close = 20 }); series.Add(new DataPoint() { Open = 20, High = 35, Low = 9, Close = 30 }); series.Add(new DataPoint() { Open = 10, High = 25, Low = 5, Close = 15 }); series.Add(new DataPoint() { Open = 15, High = 30, Low = 7, Close = 25 }); RadChart1.DefaultView.ChartArea.DataSeries.Add(series); RadChart1.DefaultView.ChartLegend.Visibility = System.Windows.Visibility.Collapsed; RadChart1.DefaultView.ChartArea.AxisX.Title = "Experiment No"; RadChart1.DefaultView.ChartArea.AxisY.Title = "Results"; RadChart1.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside; } private void _InitializeCandleStick() { DataSeries series = new DataSeries(); series.Definition = new CandleStickSeriesDefinition() { ItemStyle = this.LayoutRoot.Resources["CustomCandleStickStyle"] as Style }; series.Add( new DataPoint() { Open = 10, High = 30, Low = 5, Close = 15 } ); series.Add( new DataPoint() { Open = 15, High = 40, Low = 10, Close = 20 } ); series.Add( new DataPoint() { Open = 20, High = 35, Low = 15, Close = 30 } ); series.Add( new DataPoint() { Open = 10, High = 25, Low = 5, Close = 18 } ); series.Add( new DataPoint() { Open = 15, High = 40, Low = 10, Close = 20 } ); series.Add( new DataPoint() { Open = 20, High = 35, Low = 9, Close = 30 } ); series.Add( new DataPoint() { Open = 10, High = 25, Low = 5, Close = 15 } ); series.Add( new DataPoint() { Open = 15, High = 30, Low = 7, Close = 25 } ); RadChart2.DefaultView.ChartArea.DataSeries.Add( series ); RadChart2.DefaultView.ChartLegend.Visibility = System.Windows.Visibility.Collapsed; RadChart2.DefaultView.ChartArea.AxisX.Title = "Experiment No"; RadChart2.DefaultView.ChartArea.AxisY.Title = "Results"; RadChart2.DefaultView.ChartArea.AxisX.LayoutMode = AxisLayoutMode.Inside; } } public class CustomCandleStick : CandleStick { private ParametricLine CustomLine { get { return this.GetTemplateChild( "PART_CustomLine" ) as ParametricLine; } } protected override void UpdateParametricLinesCoordinates( Size constraint ) { base.UpdateParametricLinesCoordinates( constraint ); double middleValue = ( this.DataPoint.Open + this.DataPoint.Close ) / 2; DataRange minRange = this.CalculateRange( middleValue ) * constraint.Height; UpdateParametricLineCoordinates( this.CustomLine, this.Center - constraint.Width / 2, minRange.From, this.Center + constraint.Width / 2, minRange.From ); } protected override void UpdateParametricLinesParameters() { base.UpdateParametricLinesParameters(); UpdateParametricLineParameter( this.CustomLine, false ); } private DataRange CalculateRange( double value ) { DataRange axisRange = new DataRange( this.ChartArea.AxisY.ActualMinValue, this.ChartArea.AxisY.ActualMaxValue ); double itemY = axisRange.Normalize( value ); double zero = axisRange.Normalize( 0d ); DataRange restrictedRange = new DataRange( DataRange.Unit.Restrict( zero ), itemY ); return DataRange.Unit.Invert( restrictedRange ); } } public class CustomCandleStickSeriesDefinition : CandleStickSeriesDefinition { public override IChartItem CreateChartItem() { return new CustomCandleStick(); } }}
0
Accepted
Bartholomeo Rocca
Top achievements
Rank 1
answered on 07 Jun 2012, 01:51 PM
Hello Jason,
Try setting RadChart1.DefaultView.ChartArea.EnableAnimations property to false.
Greetings,
Bart.
Try setting RadChart1.DefaultView.ChartArea.EnableAnimations property to false.
Greetings,
Bart.