using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using LiveCharts; using LiveCharts.Configurations; using LiveCharts.Defaults; namespace Wpf.CartesianChart.PointState { /// /// Interaction logic for PointStateExample.xaml /// public partial class PointStateExample : UserControl { public PointStateExample() { InitializeComponent(); var r = new Random(); Values = new ChartValues { new ObservableValue(r.Next(10, 400)), new ObservableValue(r.Next(10, 400)), new ObservableValue(r.Next(10, 400)), new ObservableValue(r.Next(10, 400)), new ObservableValue(r.Next(10, 400)), new ObservableValue(r.Next(10, 400)) }; //Lets define a custom mapper, to set fill and stroke //according to chart values... Mapper = Mappers.Xy() .X((item, index) => index) .Y(item => item.Value) .Fill(item => item.Value > 200 ? DangerBrush : null) .Stroke(item => item.Value > 200 ? DangerBrush : null); Formatter = x => x + " ms"; DangerBrush = new SolidColorBrush(Color.FromRgb(238,83,80)); DataContext = this; } public Func Formatter { get; set; } public ChartValues Values { get; set; } public Brush DangerBrush { get; set; } public CartesianMapper Mapper { get; set; } private void UpdateDataOnClick(object sender, RoutedEventArgs e) { var r = new Random(); foreach (var observable in Values) { observable.Value = r.Next(10, 400); } } } }