<
telerik:RadGridView
Background
=
"Black"
HorizontalContentAlignment
=
"Center"
Loaded
=
"GridView_Loaded"
BorderThickness
=
"0"
AutoGenerateColumns
=
"False"
Grid.Row
=
"0"
x:Name
=
"GridView"
EditTriggers
=
"None"
CanUserDeleteRows
=
"False"
Foreground
=
"White"
SelectionChanged
=
"GridView_SelectionChanged"
RowIndicatorVisibility
=
"Collapsed"
>
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