…
<syncfusion:SfChart.Resources>
….
<local:LabelValueConverter x:Key="axisLabelConverter"/>
<DataTemplate x:Key="axisLabelTemplate">
<Border BorderBrush="Violet"
BorderThickness="2" CornerRadius="5"
Background="LightGray">
<TextBlock Foreground="Black"
FontSize="11"
Text="{Binding Converter={StaticResource axisLabelConverter},
Source={x:Reference lineSeries}}"/>
</Border>
</DataTemplate>
…
</syncfusion:SfChart.Resources>
…
<syncfusion:SfChart.Annotations>
<syncfusion:VerticalLineAnnotation ShowAxisLabel="True" Stroke="#00e1cb"
X1="{Binding VerLineAnnotaion1}"
AxisLabelTemplate="{StaticResource axisLabelTemplate}"/>
…
</syncfusion:SfChart.Annotations> |
public class LabelValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string axisLabel = string.Empty;
var series = value;
if (series != null)
{
var ser = (series as ChartSeries);
var viewModel = (series as ChartSeries).DataContext as ViewModel;
var data = ser.ItemsSource as ObservableCollection<Model>;
var xDate = ser.Name == "lineSeries" ? viewModel.VerLineAnnotaion1 :
viewModel.VerLineAnnotaion2;
foreach (var item in data)
{
if (item.XValue == xDate)
{
axisLabel = SetAnnotationAxisLabel(ser.Name, item);
break;
}
}
}
return axisLabel;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
private string SetAnnotationAxisLabel(string seriesName, Model item)
{
switch (seriesName)
{
case "lineSeries":
return "Dry Bulb Supply: " + item.YValue1.ToString();
case "scatterSeries":
return "Temperature Split: " + item.YValue2.ToString();
}
return "No data";
}
} |
<syncfusion:SfChart x:Name="chart" Header="System Overview"
MouseDown="SfChart_MouseDownClick">
<syncfusion:SfChart.ContextMenu>
<ContextMenu>
<MenuItem Header="Add" >
<MenuItem Header="Annotation" Click="AddChartAnnotation_Click"/>
</MenuItem>
</ContextMenu>
</syncfusion:SfChart.ContextMenu>
…..
<DataTemplate x:Key="showAxisLabelTemplate">
<Border BorderBrush="Violet"
BorderThickness="2" CornerRadius="5"
Background="LightGray">
<TextBlock Foreground="Black" FontSize="11"
Text="{Binding}"/>
</Border>
</DataTemplate>
…
</syncfusion:SfChart> |
private void AddChartAnnotation_Click(object sender, RoutedEventArgs e)
{
chart.Annotations.Add(new VerticalLineAnnotation() { X1 = X1,
CoordinateUnit = CoordinateUnit.Axis,
ShowAxisLabel = true,
StrokeThickness = 0,
AxisLabelTemplate = chart.Resources["showAxisLabelTemplate"] as DataTemplate,
});
}
private void SfChart_MouseDownClick(object sender, MouseButtonEventArgs e)
{
Point position = new Point
{
X = e.GetPosition(chart).X - chart.SeriesClipRect.Left,
Y = e.GetPosition(chart).Y - chart.SeriesClipRect.Top
};
//PointToValue converts window coordinates to chart X,Y coordinates
double xValue = chart.PointToValue(chart.PrimaryAxis, position);
double yValue = chart.PointToValue(chart.SecondaryAxis, position);
var date = DateTime.FromOADate(xValue);
X1 = date;
} |