WPF用LiveChart來畫餅圖
效果如下:
xmal界面代碼:
<Window x:Class="餅圖.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
xmlns:local="clr-namespace:餅圖"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Border BorderThickness="2" BorderBrush="Blue" Margin="10">
<lvc:PieChart Name="pipChart" LegendLocation="Bottom" DataClick="pipChart_DataClick" Hoverable="False"
DataTooltip="{x:Null}">
<lvc:PieChart.Series>
<lvc:PieSeries Title="Maria" DataLabels="True" LabelPoint="{Binding PointLabel}" Values="3"/>
<lvc:PieSeries Title="Charles" DataLabels="True" LabelPoint="{Binding PointLabel}" Values="4"/>
<lvc:PieSeries Title="Frida" DataLabels="True" LabelPoint="{Binding PointLabel}" Values="6"/>
<lvc:PieSeries Title="Frederic" DataLabels="True" LabelPoint="{Binding PointLabel}" Values="2"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Border>
</Grid>
</Window>
cs後臺代碼:
using LiveCharts;
using LiveCharts.Wpf;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace 餅圖
{
/// <summary>
/// MainWindow.xaml 的交互邏輯
/// </summary>
public partial class MainWindow : Window
{
public Func<ChartPoint, string> PointLabel { get; set; }
public MainWindow()
{
InitializeComponent();
PointLabel = chartPoint => string.Format("{0}({1:p})", chartPoint.Y, chartPoint.Participation);
DataContext = this;
}
private void pipChart_DataClick(object sender, LiveCharts.ChartPoint chartPoint)
{
var chart = (LiveCharts.Wpf.PieChart)chartPoint.ChartView;
//clear selected slice
foreach(PieSeries series in chart.Series)
{
series.PushOut = 0;
var selectedSeries = (PieSeries)chartPoint.SeriesView;
selectedSeries.PushOut = 8;
}
}
}
}