mirror of
https://gitee.com/akwkevin/aistudio.-wpf.-diagram
synced 2026-03-07 18:20:51 +08:00
142 lines
5.6 KiB
C#
142 lines
5.6 KiB
C#
using LiveCharts;
|
|
using LiveCharts.Defaults;
|
|
using LiveCharts.Uwp;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Runtime.CompilerServices;
|
|
using Windows.UI.Xaml;
|
|
using Windows.UI.Xaml.Controls;
|
|
|
|
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
|
|
|
|
namespace UWP.CartesianChart.StackedArea
|
|
{
|
|
/// <summary>
|
|
/// An empty page that can be used on its own or navigated to within a Frame.
|
|
/// </summary>
|
|
public sealed partial class StackedAreaExample : Page, INotifyPropertyChanged
|
|
{
|
|
private Func<double, string> _yFormatter;
|
|
|
|
public StackedAreaExample()
|
|
{
|
|
InitializeComponent();
|
|
|
|
SeriesCollection = new SeriesCollection
|
|
{
|
|
new StackedAreaSeries
|
|
{
|
|
Title = "Africa",
|
|
Values = new ChartValues<DateTimePoint>
|
|
{
|
|
new DateTimePoint(new DateTime(1950, 1, 1), .228),
|
|
new DateTimePoint(new DateTime(1960, 1, 1), .285),
|
|
new DateTimePoint(new DateTime(1970, 1, 1), .366),
|
|
new DateTimePoint(new DateTime(1980, 1, 1), .478),
|
|
new DateTimePoint(new DateTime(1990, 1, 1), .629),
|
|
new DateTimePoint(new DateTime(2000, 1, 1), .808),
|
|
new DateTimePoint(new DateTime(2010, 1, 1), 1.031),
|
|
new DateTimePoint(new DateTime(2013, 1, 1), 1.110)
|
|
},
|
|
LineSmoothness = 0
|
|
},
|
|
new StackedAreaSeries
|
|
{
|
|
Title = "N & S America",
|
|
Values = new ChartValues<DateTimePoint>
|
|
{
|
|
new DateTimePoint(new DateTime(1950, 1, 1), .339),
|
|
new DateTimePoint(new DateTime(1960, 1, 1), .424),
|
|
new DateTimePoint(new DateTime(1970, 1, 1), .519),
|
|
new DateTimePoint(new DateTime(1980, 1, 1), .618),
|
|
new DateTimePoint(new DateTime(1990, 1, 1), .727),
|
|
new DateTimePoint(new DateTime(2000, 1, 1), .841),
|
|
new DateTimePoint(new DateTime(2010, 1, 1), .942),
|
|
new DateTimePoint(new DateTime(2013, 1, 1), .972)
|
|
},
|
|
LineSmoothness = 0
|
|
},
|
|
new StackedAreaSeries
|
|
{
|
|
Title = "Asia",
|
|
Values = new ChartValues<DateTimePoint>
|
|
{
|
|
new DateTimePoint(new DateTime(1950, 1, 1), 1.395),
|
|
new DateTimePoint(new DateTime(1960, 1, 1), 1.694),
|
|
new DateTimePoint(new DateTime(1970, 1, 1), 2.128),
|
|
new DateTimePoint(new DateTime(1980, 1, 1), 2.634),
|
|
new DateTimePoint(new DateTime(1990, 1, 1), 3.213),
|
|
new DateTimePoint(new DateTime(2000, 1, 1), 3.717),
|
|
new DateTimePoint(new DateTime(2010, 1, 1), 4.165),
|
|
new DateTimePoint(new DateTime(2013, 1, 1), 4.298)
|
|
},
|
|
LineSmoothness = 0
|
|
},
|
|
new StackedAreaSeries
|
|
{
|
|
Title = "Europe",
|
|
Values = new ChartValues<DateTimePoint>
|
|
{
|
|
new DateTimePoint(new DateTime(1950, 1, 1), .549),
|
|
new DateTimePoint(new DateTime(1960, 1, 1), .605),
|
|
new DateTimePoint(new DateTime(1970, 1, 1), .657),
|
|
new DateTimePoint(new DateTime(1980, 1, 1), .694),
|
|
new DateTimePoint(new DateTime(1990, 1, 1), .723),
|
|
new DateTimePoint(new DateTime(2000, 1, 1), .729),
|
|
new DateTimePoint(new DateTime(2010, 1, 1), .740),
|
|
new DateTimePoint(new DateTime(2013, 1, 1), .742)
|
|
},
|
|
LineSmoothness = 0
|
|
}
|
|
};
|
|
|
|
XFormatter = val => new DateTime((long)val).ToString("yyyy");
|
|
YFormatter = val => val.ToString("N") + " M";
|
|
|
|
DataContext = this;
|
|
}
|
|
|
|
public SeriesCollection SeriesCollection { get; set; }
|
|
public Func<double, string> XFormatter { get; set; }
|
|
|
|
public Func<double, string> YFormatter
|
|
{
|
|
get { return _yFormatter; }
|
|
set
|
|
{
|
|
_yFormatter = value;
|
|
OnPropertyChanged();
|
|
}
|
|
}
|
|
|
|
public StackMode StackMode { get; set; }
|
|
|
|
private void ChangeStackModeOnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
foreach (var series in SeriesCollection.Cast<StackedAreaSeries>())
|
|
{
|
|
series.StackMode = series.StackMode == StackMode.Percentage
|
|
? StackMode.Values
|
|
: StackMode.Percentage;
|
|
}
|
|
|
|
if (((StackedAreaSeries)SeriesCollection[0]).StackMode == StackMode.Values)
|
|
{
|
|
YFormatter = val => val.ToString("N") + " M";
|
|
}
|
|
else
|
|
{
|
|
YFormatter = val => val.ToString("P");
|
|
}
|
|
}
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged;
|
|
|
|
public void OnPropertyChanged([CallerMemberName]string propertyName = null)
|
|
{
|
|
if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
|
}
|
|
}
|
|
}
|