Good Morning,
I am happy with the min and max values the AutoRange is providing for the Y-Axis for my line chart but the AutoRange has a step of 20 and I prefer 10.
Is it possible to set a manual step if setting AutoRange to true?
Furthermore, is it possible to set a max value for the AutoRange to use, as I notice the y range ends a little higher than it really needs to? For example, the Y-Axis range may start at 0 and end at 15 when it really only needs to end at 10, as the highest Y value is 9.5.
Thank you in advance,
David.
private void RadMenuItem_Click(object sender, Telerik.Windows.RadRoutedEventArgs e)
{
RadMenuItem item = e.Source as RadMenuItem;
RadDropDownButton btn = item.ParentOfType<RadDropDownButton>();
if (btn != null)
{
btn.IsOpen = false;
}
}
Here is the SplitButton:
<telerik:RadSplitButton Command="{Binding Path=ThisButtonComman}"
ToolTip="Default action."
Content="Click this button"
Height="25"
Margin="10,5,0,5"
AutomationProperties.AutomationId="SweetSplitButton"
AutomationProperties.Name="Sweet split button.">
<telerik:RadSplitButton.DropDownContent>
<telerik:RadMenu telerik:StyleManager.Theme="Summer" Background="Transparent" Orientation="Vertical">
<telerik:RadMenuItem Command="{Binding Path=Command1}"
AutomationProperties.AutomationId="Id1"
AutomationProperties.Name="Name1." />
<telerik:RadMenuItem Command="{Binding Path=Command1}"
AutomationProperties.AutomationId="Id2"
AutomationProperties.Name="Name2." />
<telerik:RadMenuItem Command="{Binding Path=Command3}"
AutomationProperties.AutomationId="Id3"
AutomationProperties.Name="Name3." />
</telerik:RadMenu>
</telerik:RadSplitButton.DropDownContent>
</telerik:RadSplitButton>
<UserControl.DataContext> <db:TimeChartViewModel /> </UserControl.DataContext> <UserControl.Resources> <Style x:Key="YAxisTitleStyle" TargetType="telerik:AxisTitle"> <Setter Property="Padding" Value="0, 0, 0, 0" /> <Setter Property="Margin" Value="0, 0, 0, 0" /> </Style> <Style x:Key="AdditionalYAxisTitleStyle" TargetType="telerik:AxisTitle"> <Setter Property="Padding" Value="0, 0, 0, 0" /> <Setter Property="Margin" Value="0, 3, 0, 0" /> </Style> </UserControl.Resources> <Grid> <Border telerikQuickStart:ThemeAwareBackgroundBehavior.IsEnabled="True"> <telerik:RadChart x:Name="RadTimeChart" ItemsSource="{Binding Data}"> <telerik:RadChart.DefaultView> <telerik:ChartDefaultView ChartLegendPosition="Bottom"> <telerik:ChartDefaultView.ChartArea> <telerik:ChartArea LegendName="ChartLegend1" NoDataString="Loading..." EnableAnimations="False" Padding="5, 10, 0, 5"> <telerik:ChartArea.AxisX> <telerik:AxisX DefaultLabelFormat="#VAL{H:mm:ss}" LabelRotationAngle="45" LabelStep="2" LayoutMode="Normal" Title="Time" AutoRange="False" MinValue="{Binding AxisXMinValue}" MaxValue="{Binding AxisXMaxValue}" Step="{Binding AxisXStep}" /> </telerik:ChartArea.AxisX> <telerik:ChartArea.AxisY> <telerik:AxisY DefaultLabelFormat="#VAL" Title="Power [W]" AutoRange="False" MinValue="0" MaxValue="3000" Step="500"> <telerik:AxisY.AxisStyles> <telerik:AxisStyles TitleStyle="{StaticResource YAxisTitleStyle}"/> </telerik:AxisY.AxisStyles> </telerik:AxisY> </telerik:ChartArea.AxisY> </telerik:ChartArea> </telerik:ChartDefaultView.ChartArea> <telerik:ChartDefaultView.ChartLegend> <telerik:ChartLegend x:Name="ChartLegend1" Padding="0, 10, 0, 5"/> </telerik:ChartDefaultView.ChartLegend> </telerik:ChartDefaultView> </telerik:RadChart.DefaultView> </telerik:RadChart> </Border> </Grid> #region Fields private const int queueCapacity = 30; private List<Queue<MeasurementData>> tcMeasurementData = new List<Queue<MeasurementData>>(queueCapacity); private DateTime nowTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second); private DispatcherTimer timer1; private List<Queue<MeasurementData>> _data; private double _axisXMinValue; private double _axisXMaxValue; private double _axisXStep; private LEAF.Devices.Common.TimeChartHistory device; #endregion #region Properties public LEAF.Devices.Common.TimeChartHistory Device { get { return this.device; } set { this.device = value; } } public List<Queue<MeasurementData>> Data { get { return this._data; } set { if (this._data != value) { this._data = value; this.OnPropertyChanged("Data"); } } } public double AxisXMinValue { get { return this._axisXMinValue; } set { if (this._axisXMinValue != value) { this._axisXMinValue = value; this.OnPropertyChanged("AxisXMinValue"); } } } public double AxisXMaxValue { get { return this._axisXMaxValue; } set { if (this._axisXMaxValue != value) { this._axisXMaxValue = value; this.OnPropertyChanged("AxisXMaxValue"); } } } public double AxisXStep { get { return this._axisXStep; } set { if (this._axisXStep != value) { this._axisXStep = value; this.OnPropertyChanged("AxisXStep"); } } } #endregion #region Constructor public TimeChartViewModel() { this.SetUpTimer(); } #endregion #region Methods public void StartTimer() { if (timer1 != null) timer1.Start(); } public void StopTimer() { if (timer1 != null) timer1.Stop(); } private void SetUpTimer() { timer1 = new DispatcherTimer(); timer1.Interval = TimeSpan.FromMilliseconds(500); timer1.Tick += OnTimerTick; } private void OnTimerTick(object sender, EventArgs e) { this.nowTime = this.nowTime.AddMilliseconds(500); this.UpdateData(this.nowTime); this.SetUpAxisXRange(this.nowTime); this.Data = null; this.Data = this.tcMeasurementData; } private void SetUpAxisXRange(DateTime now) { this.AxisXMinValue = now.AddSeconds(-14.5).ToOADate(); this.AxisXMaxValue = now.ToOADate(); this.AxisXStep = 1.0 / 24.0 / 3600.0 / 2.0; } private void UpdateData(DateTime now) { int i = 0; //This lines update data for each series... I'm pretty sure it is correct foreach (ChannelKeyValueConfiguration channelKeyValue in this.Device.Configuration.ChannelConfigurations) { IChannel channel = this.Device.Channels[channelKeyValue.Name]; Queue<MeasurementData> seriesData = this.tcMeasurementData[i]; if (seriesData.Count >= queueCapacity) seriesData.Dequeue(); MeasurementData lastMeasure = new MeasurementData(channel.Measure.Value, now); seriesData.Enqueue(lastMeasure); i++; } } public void AddMeasureDataSeries(Queue<MeasurementData> series) { this.tcMeasurementData.Add(series); } #endregion