参考:Windows Phone 7 chart图表编程、Silverlight的DataVisualization类组件研究(图表控件)
一、图表控件的选择
http://stackoverflow.com/questions/577278/wpf-chart-controls/4227432#4227432,
免费的可选择有:amCharts-Quick-Charts,sparrowtoolkit,DataVisualization组件
二、amCharts-Quick-Charts控件
2.1.1、MainPage页面
<phone:PhoneApplicationPage x:Class="QuickChartsWPApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:amq="clr-namespace:AmCharts.Windows.QuickCharts;assembly=AmCharts.Windows.QuickCharts.WP" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768" shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded"> <!--LayoutRoot contains the root grid where all other page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12"> <TextBlock x:Name="ApplicationTitle" Text="amCharts QuickCharts for Windows Phone" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="serial chart" Margin="-3,-8,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentGrid" Grid.Row="1"> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <amq:SerialChart x:Name="chart1" DataSource="{Binding Data}" CategoryValueMemberPath="cat1" AxisForeground="White" PlotAreaBackground="Black" MinimumCategoryGridStep="200" GridStroke="DarkGray"> <amq:SerialChart.Graphs> <amq:LineGraph ValueMemberPath="val1" Title="Line #1" Brush="Blue" /> <amq:ColumnGraph ValueMemberPath="val2" Title="Column #2" Brush="#8000FF00" ColumnWidthAllocation="0.4" /> <amq:AreaGraph ValueMemberPath="val3" Title="Area #1" Brush="#80FF0000" /> </amq:SerialChart.Graphs> </amq:SerialChart> <Grid Grid.Row="1" > <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Button Content="Rebind" Click="Button_Click" Grid.Column="0" /> <Button Content="Pie" Click="GoPie_Click" Grid.Column="1" /> <Button Content="Pivot" Click="GoPivot_Click" Grid.Column="2" /> </Grid> </Grid> </Grid> <!-- Sample code showing usage of ApplicationBar <phone:PhoneApplicationPage.ApplicationBar> <shell:ApplicationBar IsVisible="True" IsMenuEnabled="True"> <shell:ApplicationBarIconButton x:Name="appbar_button1" IconUri="/Images/appbar_button1.png" Text="Button 1"></shell:ApplicationBarIconButton> <shell:ApplicationBarIconButton x:Name="appbar_button2" IconUri="/Images/appbar_button2.png" Text="Button 2"></shell:ApplicationBarIconButton> <shell:ApplicationBar.MenuItems> <shell:ApplicationBarMenuItem x:Name="menuItem1" Text="MenuItem 1"></shell:ApplicationBarMenuItem> <shell:ApplicationBarMenuItem x:Name="menuItem2" Text="MenuItem 2"></shell:ApplicationBarMenuItem> </shell:ApplicationBar.MenuItems> </shell:ApplicationBar> </phone:PhoneApplicationPage.ApplicationBar> --> </phone:PhoneApplicationPage>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Collections.ObjectModel; using System.Windows.Threading; namespace QuickChartsWPApp { public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } private ObservableCollection<TestDataItem> _data = new ObservableCollection<TestDataItem>() { new TestDataItem() { cat1 = "cat1", val1=5, val2=15, val3=12}, new TestDataItem() { cat1 = "cat2", val1=15.2, val2=1.5, val3=2.1M}, new TestDataItem() { cat1 = "cat3", val1=25, val2=5, val3=2}, new TestDataItem() { cat1 = "cat4", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat5", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat6", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat7", val1=4.1, val2=4, val3=2}, new TestDataItem() { cat1 = "cat8", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat9", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat10", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat11", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat12", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat13", val1=4.1, val2=4, val3=2}, new TestDataItem() { cat1 = "cat14", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat15", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat16", val1=8.1, val2=1, val3=22}, new TestDataItem() { cat1 = "cat17", val1=8.1, val2=1, val3=22}, }; public ObservableCollection<TestDataItem> Data { get { return _data; } } private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { this.DataContext = this; } private void Button_Click(object sender, RoutedEventArgs e) { _data.Clear(); _data.Add(new TestDataItem() { cat1 = "cat1", val1 = 5, val2 = 15, val3 = 12 }); _data.Add(new TestDataItem() { cat1 = "cat2", val1=15.2, val2=1.5, val3=2.1M}); _data.Add(new TestDataItem() { cat1 = "cat3", val1=25, val2=5, val3=2}); _data.Add(new TestDataItem() { cat1 = "cat4", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat5", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat6", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat7", val1=4.1, val2=4, val3=2}); _data.Add(new TestDataItem() { cat1 = "cat8", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat9", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat10", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat11", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat12", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat13", val1=4.1, val2=4, val3=2}); _data.Add(new TestDataItem() { cat1 = "cat14", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat15", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat16", val1=8.1, val2=1, val3=22}); _data.Add(new TestDataItem() { cat1 = "cat17", val1=8.1, val2=1, val3=22}); } private void GoPie_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/PieChart.xaml", UriKind.Relative)); } private void GoPivot_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri("/PivotPage1.xaml", UriKind.Relative)); } } public class TestDataItem { public string cat1 { get; set; } public double val1 { get; set; } public double val2 { get; set; } public decimal val3 { get; set; } } }
2.2.1 、PieChart页面
<phone:PhoneApplicationPage x:Class="QuickChartsWPApp.PieChart" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:amq="clr-namespace:AmCharts.Windows.QuickCharts;assembly=AmCharts.Windows.QuickCharts.WP" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480" shell:SystemTray.IsVisible="True" Loaded="PhoneApplicationPage_Loaded"> <!--LayoutRoot contains the root grid where all other page content is placed--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="24,24,0,12"> <TextBlock x:Name="ApplicationTitle" Text="amCharts QuickCharts for Windows Phone" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="pie chart" Margin="-3,-8,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name="ContentGrid" Grid.Row="1"> <amq:PieChart x:Name="pie1" TitleMemberPath="title" ValueMemberPath="value" > </amq:PieChart> </Grid> </Grid> </phone:PhoneApplicationPage>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using Microsoft.Phone.Controls; using System.Collections.ObjectModel; namespace QuickChartsWPApp { public partial class PieChart : PhoneApplicationPage { public PieChart() { InitializeComponent(); } public ObservableCollection<PData> Data = new ObservableCollection<PData>() { new PData() { title = "slice #1", value = 30 }, new PData() { title = "slice #2", value = 60 }, new PData() { title = "slice #3", value = 40 }, new PData() { title = "slice #4", value = 10 }, }; private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e) { pie1.DataSource = Data; } } public class PData { public string title { get; set; } public double value { get; set; } } }
三、sparrowtoolkit控件
3.1 、MainPage页面
<phone:PhoneApplicationPage x:Class="Chart.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:local="clr-namespace:Chart" xmlns:sparrow="clr-namespace:Sparrow.Chart;assembly=Sparrow.Chart.WP8.45" FontFamily="{StaticResource PhoneFontFamilyNormal}" FontSize="{StaticResource PhoneFontSizeNormal}" Foreground="{StaticResource PhoneForegroundBrush}" SupportedOrientations="Portrait" Orientation="Portrait" shell:SystemTray.IsVisible="True"> <!--LayoutRoot 是包含所有页面内容的根网格--> <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <!-- 本地化说明: 若要本地化显示的字符串,请将其值复制到应用程序的非特定语言资源文件(AppResources.resx) 中的适当命名的键,然后 将属性的引号之间的硬编码文本值 替换为其路径指向该字符串名称的绑定子句。 例如: Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}" 此绑定指向模板的名为“ApplicationTitle”的字符串资源。 在“项目属性”选项卡中添加受支持的语言将会为 每种语言创建一个新的 resx 文件,该文件可以包含 UI 字符串的翻译值 。这些示例中的绑定将导致在运行时从 与应用程序的 CurrentUICulture 匹配的 .resx 文件中 提取属性的值。 --> <!--TitlePanel 包含应用程序的名称和页标题--> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock Text="我的应用程序" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/> <TextBlock Text="页面名称" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> </StackPanel> <!--ContentPanel - 在此处放置其他内容--> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <!--<sparrow:SparrowChart> <sparrow:SparrowChart.XAxis> <sparrow:LinearXAxis/> </sparrow:SparrowChart.XAxis> <sparrow:SparrowChart.YAxis> <sparrow:LinearYAxis/> </sparrow:SparrowChart.YAxis> <sparrow:LineSeries> <sparrow:LineSeries.Points> <sparrow:DoublePoint Data="0" Value="1"/> <sparrow:DoublePoint Data="1" Value="2"/> <sparrow:DoublePoint Data="2" Value="3"/> <sparrow:DoublePoint Data="3" Value="4"/> </sparrow:LineSeries.Points> </sparrow:LineSeries> </sparrow:SparrowChart>--> <sparrow:SparrowChart> <sparrow:SparrowChart.DataContext> <local:ViewModel/> </sparrow:SparrowChart.DataContext> <sparrow:SparrowChart.XAxis> <sparrow:LinearXAxis/> </sparrow:SparrowChart.XAxis> <sparrow:SparrowChart.YAxis> <sparrow:LinearYAxis/> </sparrow:SparrowChart.YAxis> <sparrow:LineSeries PointsSource="{Binding Collection}" XPath="X" YPath="Y"/> </sparrow:SparrowChart> </Grid> <!--取消注释,以显示对齐网格,从而帮助确保 控件在公用边界上对齐。图像在系统栏中显示时的 上边距为 -32px。如果隐藏了系统栏,则将此值设为 0 (或完全删除边距)。 在发送之前删除此 XAML 和图像本身。--> <!--<Image Source="/Assets/AlignmentGrid.png" VerticalAlignment="Top" Height="800" Width="480" Margin="0,-32,0,0" Grid.Row="0" Grid.RowSpan="2" IsHitTestVisible="False" />--> </Grid> </phone:PhoneApplicationPage>
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Microsoft.Phone.Controls; using Microsoft.Phone.Shell; using Chart.Resources; using System.Collections.ObjectModel; namespace Chart { public partial class MainPage : PhoneApplicationPage { // 构造函数 public MainPage() { InitializeComponent(); // 用于本地化 ApplicationBar 的示例代码 //BuildLocalizedApplicationBar(); } // 用于生成本地化 ApplicationBar 的示例代码 //private void BuildLocalizedApplicationBar() //{ // // 将页面的 ApplicationBar 设置为 ApplicationBar 的新实例。 // ApplicationBar = new ApplicationBar(); // // 创建新按钮并将文本值设置为 AppResources 中的本地化字符串。 // ApplicationBarIconButton appBarButton = new ApplicationBarIconButton(new Uri("/Assets/AppBar/appbar.add.rest.png", UriKind.Relative)); // appBarButton.Text = AppResources.AppBarButtonText; // ApplicationBar.Buttons.Add(appBarButton); // // 使用 AppResources 中的本地化字符串创建新菜单项。 // ApplicationBarMenuItem appBarMenuItem = new ApplicationBarMenuItem(AppResources.AppBarMenuItemText); // ApplicationBar.MenuItems.Add(appBarMenuItem); //} } //Create a model public class Model { public double X { get; set; } public double Y { get; set; } public Model(double x, double y) { X = x; Y = y; } } // Create a ViewModel public class ViewModel { public ObservableCollection<Model> Collection { get; set; } public ViewModel() { Collection = new ObservableCollection<Model>(); GenerateDatas(); } private void GenerateDatas() { this.Collection.Add(new Model(0, 1)); this.Collection.Add(new Model(1, 2)); this.Collection.Add(new Model(2, 3)); this.Collection.Add(new Model(3, 4)); } } }3.3、效果
四、基于Silverlight的DataVisualization组件
4.1、MainPage页面
<phone:PhoneApplicationPage xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone" xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone" xmlns:charting="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:local="clr-namespace:WpCharts" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls" x:Class="WpCharts.MainPage" SupportedOrientations="PortraitOrLandscape" Orientation="Portrait" mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="800" shell:SystemTray.IsVisible="False"> <phone:PhoneApplicationPage.Resources> <!-- Data --> <local:GradeOneDataProvider x:Key="GradeOneData"/> <local:GradeTwoDataProvider x:Key="GradeTwoData"/> </phone:PhoneApplicationPage.Resources> <Grid> <Grid.RowDefinitions> <RowDefinition /> </Grid.RowDefinitions> <!-- Title --> <controls:Panorama Background="Transparent" x:Name="Panorama" SelectionChanged="Panorama_SelectionChanged" FontSize="24" Title="图表控件" > <controls:PanoramaItem Header="线性图"> <charting:Chart x:Name="LineSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="饼图"> <charting:Chart x:Name="PieSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="柱形图"> <charting:Chart x:Name="ColumnSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="区域图"> <charting:Chart x:Name="AreaSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="条状图"> <charting:Chart x:Name="BarSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="散点图"> <charting:Chart x:Name="ScatterSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="气泡图"> <charting:Chart x:Name="BubbleSeriesChart" FontSize="24"/> </controls:PanoramaItem> <controls:PanoramaItem Header="多区域图"> <charting:Chart x:Name="MutiAreaSeriesChart" FontSize="24"> <charting:Chart.Series> <charting:AreaSeries Title="第一季度" ItemsSource="{Binding GradeOneData,Source={StaticResource GradeOneData}}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Score}"/> <charting:AreaSeries Title="第二季度" ItemsSource="{Binding GradeTwoData,Source={StaticResource GradeTwoData}}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Score}"/> </charting:Chart.Series> </charting:Chart> </controls:PanoramaItem> <controls:PanoramaItem Header="混合图"> <charting:Chart x:Name="MixtureChart" FontSize="24"/> </controls:PanoramaItem> </controls:Panorama> </Grid> </phone:PhoneApplicationPage>
using System.Collections.Generic; using System.Windows; using System.Windows.Controls; using Microsoft.Phone.Controls; using System.Windows.Media; using System.Windows.Controls.DataVisualization.Charting; namespace WpCharts { #region 静态绑定资源 public class GradeOneDataProvider { public List<Students> GradeOneData { get { return new List<Students> { new Students() { Name = "张三", Score = 80 }, new Students() { Name = "李四", Score = 78 }, new Students() { Name = "王五", Score = 82 }, new Students() { Name = "赵六", Score = 85 }, new Students() { Name = "钱七", Score = 90 } }; } } } public class GradeTwoDataProvider { public List<Students> GradeTwoData { get { return new List<Students> { new Students() { Name = "张三", Score = 88 }, new Students() { Name = "李四", Score = 80 }, new Students() { Name = "王五", Score = 78 }, new Students() { Name = "赵六", Score = 79 }, new Students() { Name = "钱七", Score = 85 } }; } } } #endregion public class Students { public string Name { get; set; } public int Score { get; set; } } public partial class MainPage : PhoneApplicationPage { public MainPage() { InitializeComponent(); this.Loaded += new RoutedEventHandler(MainPage_Loaded); } void MainPage_Loaded(object sender, RoutedEventArgs e) { //添加图表序列 //线性图 LineSeries LS = new LineSeries(); LS.Title = "线性图"; LS.ItemsSource = GetStudentsInfo(); LS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); LS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //饼图 PieSeries PS = new PieSeries(); PS.Title = "饼图"; PS.ItemsSource = GetStudentsInfo(); PS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); PS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //柱状图 ColumnSeries CS = new ColumnSeries(); CS.Title = "柱状图"; CS.ItemsSource = GetStudentsInfo(); CS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); CS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //区域图 AreaSeries AS = new AreaSeries(); AS.Title = "区域图"; AS.ItemsSource = GetStudentsInfo(); AS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); AS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //条状图 BarSeries BS = new BarSeries(); BS.Title = "条状图"; BS.ItemsSource = GetStudentsInfo(); BS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); BS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //散点图 ScatterSeries SS = new ScatterSeries(); SS.Title = "散点图"; SS.ItemsSource = GetStudentsInfo(); SS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); SS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //气泡图 BubbleSeries BUS = new BubbleSeries(); BUS.Title = "气泡图"; BUS.ItemsSource = GetStudentsInfo(); BUS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); BUS.DependentValueBinding = new System.Windows.Data.Binding("Score"); LineSeriesChart.Series.Add(LS); PieSeriesChart.Series.Add(PS); ColumnSeriesChart.Series.Add(CS); AreaSeriesChart.Series.Add(AS); BarSeriesChart.Series.Add(BS); ScatterSeriesChart.Series.Add(SS); BubbleSeriesChart.Series.Add(BUS); } //数据源1 private List<Students> GetStudentsInfo() { List<Students> returnedValue = new List<Students>(); returnedValue.Add(new Students() { Name = "张三", Score = 80 }); returnedValue.Add(new Students() { Name = "李四", Score = 85 }); returnedValue.Add(new Students() { Name = "王五", Score = 82 }); returnedValue.Add(new Students() { Name = "赵六", Score = 78 }); returnedValue.Add(new Students() { Name = "钱七", Score = 90 }); return returnedValue; } //数据源2 private List<Students> GetStudentsInfo2() { List<Students> returnedValue = new List<Students>(); returnedValue.Add(new Students() { Name = "孙八", Score = 76 }); returnedValue.Add(new Students() { Name = "牛久", Score = 88 }); returnedValue.Add(new Students() { Name = "代十", Score = 91 }); returnedValue.Add(new Students() { Name = "唐一", Score = 70 }); returnedValue.Add(new Students() { Name = "丁二", Score = 62 }); return returnedValue; } private void Panorama_SelectionChanged(object sender, SelectionChangedEventArgs e) { if (Panorama.SelectedIndex == 8) { MixtureChart.Series.Clear(); //添加图表序列 //线性图 LineSeries LS = new LineSeries(); LS.Title = "线性图"; LS.ItemsSource = GetStudentsInfo(); LS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); LS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //饼图 PieSeries PS = new PieSeries(); PS.Title = "饼图"; PS.ItemsSource = GetStudentsInfo(); PS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); PS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //柱状图 ColumnSeries CS = new ColumnSeries(); CS.Title = "柱状图"; CS.ItemsSource = GetStudentsInfo(); CS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); CS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //区域图 AreaSeries AS = new AreaSeries(); AS.Title = "区域图"; AS.ItemsSource = GetStudentsInfo(); AS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); AS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //条状图 BarSeries BS = new BarSeries(); BS.Title = "条状图"; BS.ItemsSource = GetStudentsInfo(); BS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); BS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //散点图 ScatterSeries SS = new ScatterSeries(); SS.Title = "散点图"; SS.ItemsSource = GetStudentsInfo(); SS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); SS.DependentValueBinding = new System.Windows.Data.Binding("Score"); //气泡图 BubbleSeries BUS = new BubbleSeries(); BUS.Title = "气泡图"; BUS.ItemsSource = GetStudentsInfo(); BUS.IndependentValueBinding = new System.Windows.Data.Binding("Name"); BUS.DependentValueBinding = new System.Windows.Data.Binding("Score"); MixtureChart.Series.Add(LS); MixtureChart.Series.Add(PS); MixtureChart.Series.Add(CS); MixtureChart.Series.Add(AS); MixtureChart.Series.Add(BS); MixtureChart.Series.Add(SS); MixtureChart.Series.Add(BUS); //MixtureChart.Series.Add(LS); //MixtureChart.Series.Add(CS); //MixtureChart.Series.Add(AS); //MixtureChart.Series.Add(SS); } } } }