using System;using System.ComponentModel;using System.Linq;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using LiveCharts;using LiveCharts.Defaults;using LiveCharts.Wpf;using Wpf.Annotations;namespace Wpf.CartesianChart.Financial
{publicpartialclassOhclExample:UserControl, INotifyPropertyChanged
{privatestring[] _labels;publicOhclExample(){InitializeComponent();
SeriesCollection =newSeriesCollection{newOhlcSeries(){
Values =newChartValues<OhlcPoint>{newOhlcPoint(32,35,30,32),newOhlcPoint(33,38,31,37),newOhlcPoint(35,42,30,40),newOhlcPoint(37,40,35,38),newOhlcPoint(35,38,32,33)}},newLineSeries{
Values =newChartValues<double>{30,32,35,30,28},
Fill = Brushes.Transparent
}};//based on https://github.com/beto-rodriguez/Live-Charts/issues/166 //The Ohcl point X property is zero based indexed.//this means the first point is 0, second 1, third 2.... and so on//then you can use the Axis.Labels properties to map the chart X with a label in the array.//for more info see (mapped labels section) //http://lvcharts.net/#/examples/v1/labels-wpf?path=WPF-Components-Labels
Labels =new[]{
DateTime.Now.ToString("dd MMM"),
DateTime.Now.AddDays(1).ToString("dd MMM"),
DateTime.Now.AddDays(2).ToString("dd MMM"),
DateTime.Now.AddDays(3).ToString("dd MMM"),
DateTime.Now.AddDays(4).ToString("dd MMM"),};
DataContext =this;}publicSeriesCollection SeriesCollection {get;set;}publicstring[] Labels
{get{return _labels;}set{
_labels =value;OnPropertyChanged("Labels");}}privatevoidUpdateAllOnClick(object sender,RoutedEventArgs e){var r =newRandom();foreach(var point in SeriesCollection[0].Values.Cast<OhlcPoint>()){
point.Open = r.Next((int) point.Low,(int) point.High);
point.Close = r.Next((int) point.Low,(int) point.High);}}publiceventPropertyChangedEventHandler PropertyChanged;protectedvirtualvoidOnPropertyChanged(string propertyName =null){if(PropertyChanged !=null) PropertyChanged.Invoke(this,newPropertyChangedEventArgs(propertyName));}}}
前臺
<UserControlx:Class="Wpf.CartesianChart.Financial.OhclExample"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:Wpf.CartesianChart"xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"xmlns:financial="clr-namespace:Wpf.CartesianChart.Financial"mc:Ignorable="d"d:DesignHeight="300"d:DesignWidth="300"d:DataContext="{d:DesignInstance financial:OhclExample }"><Grid><Grid.RowDefinitions><RowDefinitionHeight="Auto"></RowDefinition><RowDefinitionHeight="Auto"></RowDefinition><RowDefinitionHeight="*"></RowDefinition></Grid.RowDefinitions><ButtonGrid.Row="1"Click="UpdateAllOnClick">Update Open and Close</Button><lvc:CartesianChartGrid.Row="2"Series="{Binding SeriesCollection}"><lvc:CartesianChart.AxisX><lvc:AxisLabels="{Binding Labels}"/></lvc:CartesianChart.AxisX></lvc:CartesianChart></Grid></UserControl>