源码下载:单击下载
WinRTXamlToolkit.Controls.DataVisualization.Charting图形报表下自定义控件,分为单组数据SingleChart用户控件和多组数据MixedChart用户控件。传递数据集合和其它参数,让图形按需展示。
一、Model:代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ChartForWin8 { /// <summary> /// 图形实体类 /// </summary> public class UserChart : INotifyPropertyChanged { /// <summary> /// 图形X轴名称 /// </summary> private string name; public string Name { get { return name; } set { name = value; NotifyPropertyChanged("Name"); } } /// <summary> /// 图形Y轴值 /// </summary> private double _value; public double Value { get { return _value; } set { _value = value; NotifyPropertyChanged("Value"); } } /// <summary> /// 图形上方名称 /// </summary> private string title; public string Title { get { return title; } set { title = value; NotifyPropertyChanged("Title"); } } /// <summary> /// 图形右侧介绍 /// </summary> private string description; public string Description { get { return description; } set { description = value; NotifyPropertyChanged("Description"); } } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } /// <summary> /// 图形类型枚举 /// </summary> public enum ChartEnum { //区域图 AreaChart = 1, //条形图 BarChart = 2, //气泡图 BubbleChart = 3, //柱状图 ColumnChart = 4, //折线图 LineChart = 5, //散点图 ScatterChart = 6, //饼状图(不适用于多组数据) PieChart = 7, //复合图,线性图和柱状图(不适用于多组数据) MixedChart = 8, //百分比堆积区域图 Stacked100Area = 9, //百分比堆积条形图 Stacked100Bar = 10, //百分比堆积柱状图 Stacked100Column = 11, //百分比堆积折线图 Stacked100Line = 12, //堆积区域图 StackedArea = 13, //堆积条形图 StackedBar = 14, //堆积柱状图 StackedColumn = 15, //堆积折线图 StackedLine = 16, } }
三、SingleChart用户控件详解
1、页面XMAL
<UserControl x:Class="ChartForWin8.SingleChart" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ChartForWin8" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:controls="using:WinRTXamlToolkit.Controls" xmlns:charting="using:WinRTXamlToolkit.Controls.DataVisualization.Charting" xmlns:Series="using:WinRTXamlToolkit.Controls.DataVisualization.Charting" xmlns:datavis="using:WinRTXamlToolkit.Controls.DataVisualization" d:DesignHeight="300" d:DesignWidth="400"> <Grid> <!--区域图 AreaChart 1 --> <FlipView x:Name="AreaChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="AreaChart" Title="Area Chart" Margin="0,0"> <charting:AreaSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <!--条形图 BarChart 2 --> <FlipView x:Name="BarChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="BarChart" Title="Bar Chart" Margin="0,0"> <charting:BarSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <!--气泡图 BubbleChart 3 --> <FlipView x:Name="BubbleChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="BubbleChart" Title="Bubble Chart" Margin="0,0"> <charting:BubbleSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <!--柱状图 ColumnChart 4 --> <FlipView x:Name="ColumnChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="ColumnChart" Title="Column Chart" Margin="0,0"> <charting:Chart.Series> <charting:ColumnSeries Title="Population" ItemsSource="{Binding Items}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart.Series> </charting:Chart> </FlipView> <!--折线图 LineChart 5 --> <FlipView x:Name="LineChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="LineChart" Title="Line Chart" Margin="10,0"> <charting:LineSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True"/> </charting:Chart> </FlipView> <!--散点图 ScatterChart 6 --> <FlipView x:Name="ScatterChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="ScatterChart" Title="Scatter Chart" Margin="0,0"> <charting:ScatterSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <!--饼状图 PieChart 7 --> <FlipView x:Name="PieChartsFlip" Visibility="Collapsed"> <charting:Chart x:Name="PieChart" Title="" Margin="0,0"> <charting:Chart.Series> <Series:PieSeries Margin="0,0" Title="Population" ItemsSource="{Binding Items}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart.Series> </charting:Chart> </FlipView> <!--复合图 MixedChart 8 线性图和柱状图 --> <FlipView x:Name="MixedChartFlip" Visibility="Collapsed"> <charting:Chart x:Name="MixedChart" Title="Mixed Chart" Margin="0,0"> <charting:ColumnSeries Title="Population" ItemsSource="{Binding Items}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> <charting:LineSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <!-- 以下保留未用 --> <FlipView x:Name="PieChartWithCustomDesignFlip" Visibility="Collapsed"> <charting:Chart x:Name="PieChartWithCustomDesign" Title="Pie Chart with Custom Design" Margin="0,0"> <charting:Chart.Palette> <charting:ResourceDictionaryCollection> <!-- Gold --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="Gold" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Green --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="GreenYellow" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Blue --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="LightSkyBlue" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Purple --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="MediumPurple" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Brown --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="SandyBrown" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> </charting:ResourceDictionaryCollection> </charting:Chart.Palette> <charting:Chart.TitleStyle> <Style TargetType="datavis:Title"> <Setter Property="Background" Value="#444" /> <Setter Property="HorizontalContentAlignment" Value="Center" /> <Setter Property="VerticalContentAlignment" Value="Top" /> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Padding" Value="10" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="datavis:Title"> <Border CornerRadius="10" Background="{TemplateBinding Background}"> <ContentPresenter FontSize="36" FontWeight="SemiBold" FontStretch="Condensed" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" Margin="{TemplateBinding Padding}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </charting:Chart.TitleStyle> <charting:Chart.LegendStyle> <Style TargetType="datavis:Legend"> <Setter Property="VerticalAlignment" Value="Stretch" /> <Setter Property="Background" Value="#444" /> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <controls:UniformGrid Columns="1" Rows="15" /> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="TitleStyle"> <Setter.Value> <Style TargetType="datavis:Title"> <Setter Property="Margin" Value="0,5,0,10" /> <Setter Property="FontWeight" Value="Bold" /> <Setter Property="HorizontalAlignment" Value="Center" /> </Style> </Setter.Value> </Setter> <Setter Property="ItemContainerStyle" xmlns:series="using:WinRTXamlToolkit.Controls.DataVisualization.Charting"> <Setter.Value> <Style TargetType="series:LegendItem"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="series:LegendItem"> <Border MinWidth="200" Margin="20,10" CornerRadius="10" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Background="{Binding Background}"> <datavis:Title HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24" FontWeight="Bold" Content="{TemplateBinding Content}" /> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="datavis:Legend"> <Border CornerRadius="10" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="2"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <datavis:Title Grid.Row="0" x:Name="HeaderContent" Content="{TemplateBinding Header}" ContentTemplate="{TemplateBinding HeaderTemplate}" Style="{TemplateBinding TitleStyle}" /> <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" BorderThickness="0" Padding="0" IsTabStop="False"> <ItemsPresenter x:Name="Items" Margin="10,0,10,10" /> </ScrollViewer> </Grid> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style> </charting:Chart.LegendStyle> <charting:Chart.Series> <Series:PieSeries Title="Population" ItemsSource="{Binding Items}" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart.Series> </charting:Chart> </FlipView> <FlipView x:Name="LineChartWithAxesFlip" Visibility="Collapsed"> <charting:Chart x:Name="LineChartWithAxes" Title="Line Chart w/Manually Set Axis Range" Margin="0,0"> <charting:LineSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True" /> </charting:Chart> </FlipView> <FlipView x:Name="LineChart2Flip" Visibility="Collapsed"> <charting:Chart x:Name="LineChart2" Title="Line Chart Without Data Points" Margin="0,0"> <charting:LineSeries Title="Population" IndependentValueBinding="{Binding Name}" DependentValueBinding="{Binding Value}" IsSelectionEnabled="True"> <charting:LineSeries.DataPointStyle> <Style TargetType="charting:LineDataPoint"> <Setter Property="BorderThickness" Value="0" /> <Setter Property="IsTabStop" Value="False" /> <Setter Property="Width" Value="0" /> <Setter Property="Height" Value="0" /> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="charting:LineDataPoint"> <Grid x:Name="Root" Opacity="0" /> </ControlTemplate> </Setter.Value> </Setter> </Style> </charting:LineSeries.DataPointStyle> </charting:LineSeries> </charting:Chart> </FlipView> <FlipView x:Name="StackedBarFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedBar" Title="Stacked Bar Chart" Margin="0,0"> <charting:StackedBarSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Doodad" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Gizmo" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Widget" /> </charting:StackedBarSeries> </charting:Chart> </FlipView> <FlipView x:Name="StackedBar100Flip" Visibility="Collapsed"> <charting:Chart x:Name="StackedBar100" Title="100% Stacked Bar Chart" Margin="0,0"> <charting:Stacked100BarSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Doodad" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Gizmo" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Widget" /> </charting:Stacked100BarSeries> </charting:Chart> </FlipView> <FlipView x:Name="StackedColumnFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedColumn" Title="Stacked Column Chart" Margin="0,0"> <charting:StackedColumnSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Doodad" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Gizmo" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Widget" /> </charting:StackedColumnSeries> </charting:Chart> </FlipView> <FlipView x:Name="StackedColumn100Flip" Visibility="Collapsed"> <charting:Chart x:Name="StackedColumn100" Title="100% Stacked Column Chart" Margin="0,0"> <Series:Stacked100ColumnSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Doodad" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Gizmo" /> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="Widget" /> </Series:Stacked100ColumnSeries> </charting:Chart> </FlipView> </Grid> </UserControl>
2、后台
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.Graphics.Display; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using WinRTXamlToolkit.Controls.DataVisualization.Charting; // “用户控件”项模板在 http://go.microsoft.com/fwlink/?LinkId=234236 上提供 namespace ChartForWin8 { public sealed partial class SingleChart : UserControl { public SingleChart(ObservableCollection<UserChart> items, ChartEnum charType, bool hideLegend) { this.InitializeComponent(); BindChart(items, charType, hideLegend); } /// <summary> /// 数据绑定 /// </summary> /// <param name="items">数据集合</param> /// <param name="charType">图表类型</param> /// <param name="hideLegend">是否隐藏Description</param> public void BindChart(ObservableCollection<UserChart> items, ChartEnum charType, bool hideLegend) { if (charType == ChartEnum.PieChart) { ((PieSeries)this.PieChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.PieChart.Title = items.First().Title; } hideAllFilpButThis(PieChartsFlip); } else if (charType == ChartEnum.ColumnChart) { ((ColumnSeries)this.ColumnChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.ColumnChart.Title = items.First().Title; ((ColumnSeries)this.ColumnChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(ColumnChartFlip); if (hideLegend) { hideLegendStyle(ColumnChart); } } else if (charType == ChartEnum.BarChart) { ((BarSeries)this.BarChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.BarChart.Title = items.First().Title; ((BarSeries)this.BarChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(BarChartFlip); if (hideLegend) { hideLegendStyle(BarChart); } } else if (charType == ChartEnum.LineChart) { ((LineSeries)this.LineChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.LineChart.Title = items.First().Title; ((LineSeries)this.LineChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(LineChartFlip); if (hideLegend) { hideLegendStyle(LineChart); } } else if (charType == ChartEnum.MixedChart) { ((ColumnSeries)this.MixedChart.Series[0]).ItemsSource = items; ((LineSeries)this.MixedChart.Series[1]).ItemsSource = items; if (items != null && items.Count > 0) { this.MixedChart.Title = items.First().Title; ((ColumnSeries)this.MixedChart.Series[0]).Title = items.First().Description; ((LineSeries)this.MixedChart.Series[1]).Title = items.First().Description; } hideAllFilpButThis(MixedChartFlip); if (hideLegend) { hideLegendStyle(MixedChart); } } else if (charType == ChartEnum.AreaChart) { ((AreaSeries)this.AreaChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.AreaChart.Title = items.First().Title; ((AreaSeries)this.AreaChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(AreaChartFlip); if (hideLegend) { hideLegendStyle(AreaChart); } } else if (charType == ChartEnum.BubbleChart) { ((BubbleSeries)this.BubbleChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.BubbleChart.Title = items.First().Title; ((BubbleSeries)this.BubbleChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(BubbleChartFlip); if (hideLegend) { hideLegendStyle(BubbleChart); } } else if (charType == ChartEnum.ScatterChart) { ((ScatterSeries)this.ScatterChart.Series[0]).ItemsSource = items; if (items != null && items.Count > 0) { this.ScatterChart.Title = items.First().Title; ((ScatterSeries)this.ScatterChart.Series[0]).Title = items.First().Description; } hideAllFilpButThis(ScatterChartFlip); if (hideLegend) { hideLegendStyle(ScatterChart); } } else { if (items != null && items.Count > 0) { this.PieChart.Title = items.First().Title; } hideAllFilpButThis(PieChartsFlip); } } /// <summary> /// 隐藏所有FlipView除了传递过来的 /// </summary> /// <param name="sender"></param> public void hideAllFilpButThis(FlipView sender) { PieChartsFlip.Visibility = Visibility.Collapsed; PieChartWithCustomDesignFlip.Visibility = Visibility.Collapsed; ColumnChartFlip.Visibility = Visibility.Collapsed; BarChartFlip.Visibility = Visibility.Collapsed; LineChartFlip.Visibility = Visibility.Collapsed; LineChartWithAxesFlip.Visibility = Visibility.Collapsed; LineChart2Flip.Visibility = Visibility.Collapsed; MixedChartFlip.Visibility = Visibility.Collapsed; AreaChartFlip.Visibility = Visibility.Collapsed; BubbleChartFlip.Visibility = Visibility.Collapsed; ScatterChartFlip.Visibility = Visibility.Collapsed; StackedBarFlip.Visibility = Visibility.Collapsed; StackedBar100Flip.Visibility = Visibility.Collapsed; StackedColumnFlip.Visibility = Visibility.Collapsed; StackedColumn100Flip.Visibility = Visibility.Collapsed; sender.Visibility = Visibility.Visible; } /// <summary> /// 隐藏Legend(Description) /// </summary> /// <param name="sender"></param> public void hideLegendStyle(Chart sender) { Style legendStyle = new Style(); legendStyle.TargetType = typeof(Control); Setter setterWidth = new Setter(Control.WidthProperty, 0); Setter setterHeight = new Setter(Control.HeightProperty, 0); legendStyle.Setters.Add(setterWidth); legendStyle.Setters.Add(setterHeight); sender.LegendStyle = legendStyle; } } }
<UserControl x:Class="ChartForWin8.MixedChart" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ChartForWin8" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:controls="using:WinRTXamlToolkit.Controls" xmlns:charting="using:WinRTXamlToolkit.Controls.DataVisualization.Charting" xmlns:Series="using:WinRTXamlToolkit.Controls.DataVisualization.Charting" xmlns:datavis="using:WinRTXamlToolkit.Controls.DataVisualization" d:DesignHeight="300" d:DesignWidth="400"> <Grid> <!--复合图,多组图形复合 --> <FlipView x:Name="MixedChartFlip"> <charting:Chart x:Name="MyMixedChart" Title="" Margin="0,0"> <charting:Chart.Palette> <charting:ResourceDictionaryCollection> <!-- Blue --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="LightSkyBlue" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Yellow --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="YellowGreen" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- LightCoral --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="LightCoral" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Brown --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="SandyBrown" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Purple --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="MediumPurple" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Gold --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="Gold" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> <!-- Green --> <ResourceDictionary> <SolidColorBrush x:Key="Background" Color="GreenYellow" /> <Style x:Key="DataPointStyle" TargetType="Control"> <Setter Property="Background" Value="{StaticResource Background}" /> </Style> <Style x:Key="DataShapeStyle" TargetType="Shape"> <Setter Property="Stroke" Value="{StaticResource Background}" /> <Setter Property="StrokeThickness" Value="2" /> <Setter Property="StrokeMiterLimit" Value="1" /> <Setter Property="Fill" Value="{StaticResource Background}" /> </Style> </ResourceDictionary> </charting:ResourceDictionaryCollection> </charting:Chart.Palette> </charting:Chart> </FlipView> <!--百分比堆积区域图 Stacked100Area 9 --> <FlipView x:Name="Stacked100AreaFlip" Visibility="Collapsed"> <charting:Chart x:Name="Stacked100Area" Title="" Margin="0,0"> <charting:Stacked100AreaSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:Stacked100AreaSeries> </charting:Chart> </FlipView> <!--百分比堆积条形图 Stacked100Bar 10 --> <FlipView x:Name="Stacked100BarFlip" Visibility="Collapsed"> <charting:Chart x:Name="Stacked100Bar" Title="" Margin="0,0"> <charting:Stacked100BarSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:Stacked100BarSeries> </charting:Chart> </FlipView> <!--百分比堆积柱状图 Stacked100Column 11 --> <FlipView x:Name="Stacked100ColumnFlip" Visibility="Collapsed"> <charting:Chart x:Name="Stacked100Column" Title="" Margin="0,0"> <charting:Stacked100ColumnSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:Stacked100ColumnSeries> </charting:Chart> </FlipView> <!--百分比堆积折线图 Stacked100Line 12 --> <FlipView x:Name="Stacked100LineFlip" Visibility="Collapsed"> <charting:Chart x:Name="Stacked100Line" Title="" Margin="0,0"> <charting:Stacked100LineSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:Stacked100LineSeries> </charting:Chart> </FlipView> <!--堆积区域图 StackedArea 13 --> <FlipView x:Name="StackedAreaFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedArea" Title="" Margin="0,0"> <charting:StackedAreaSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:StackedAreaSeries> </charting:Chart> </FlipView> <!--堆积条形图 StackedBar 14 --> <FlipView x:Name="StackedBarFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedBar" Title="Stacked Bar Chart" Margin="0,0"> <charting:StackedBarSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:StackedBarSeries> </charting:Chart> </FlipView> <!--堆积柱状图 StackedColumn 15 --> <FlipView x:Name="StackedColumnFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedColumn" Title="Stacked Column Chart" Margin="0,0"> <charting:StackedColumnSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:StackedColumnSeries> </charting:Chart> </FlipView> <!--堆积折线图 StackedLine 16 --> <FlipView x:Name="StackedLineFlip" Visibility="Collapsed"> <charting:Chart x:Name="StackedLine" Title="" Margin="0,0"> <charting:StackedLineSeries> <charting:SeriesDefinition DependentValuePath="Value" IndependentValuePath="Name" IsTapEnabled="True" Title="" /> </charting:StackedLineSeries> </charting:Chart> </FlipView> </Grid> </UserControl>
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.Graphics.Display; using Windows.UI.Core; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; using WinRTXamlToolkit.Controls.DataVisualization.Charting; // “用户控件”项模板在 http://go.microsoft.com/fwlink/?LinkId=234236 上提供 namespace ChartForWin8 { public sealed partial class MixedChart : UserControl { public MixedChart(Dictionary<int, ObservableCollection<UserChart>> chartListDic, ObservableCollection<ChartEnum> enumLists) { this.InitializeComponent(); BindChart(chartListDic, enumLists); } /// <summary> /// 数据绑定 /// </summary> /// <param name="items">数据集合</param> /// <param name="charType">图表类型</param> /// <param name="hideLegend">是否隐藏Description</param> public void BindChart(Dictionary<int, ObservableCollection<UserChart>> chartListDic, ObservableCollection<ChartEnum> enumLists) { //Stacked100AreaSeries Stacked100LineSeries StackedAreaSeries StackedLineSeries 父容器初始化底下需要内容(可以在刚开始给它内容(Series),然后使用时清除掉Series.Clear()),否则会报错 Stacked100AreaSeries stacked100Area = new Stacked100AreaSeries(); Stacked100BarSeries stacked100Bar = new Stacked100BarSeries(); Stacked100ColumnSeries stacked100Column = new Stacked100ColumnSeries(); Stacked100LineSeries stacked100Line = new Stacked100LineSeries(); StackedAreaSeries stackedArea = new StackedAreaSeries(); StackedBarSeries stackedBar = new StackedBarSeries(); StackedColumnSeries stackedColumn = new StackedColumnSeries(); StackedLineSeries stackedLine = new StackedLineSeries(); MyMixedChart.Series.Clear(); if (chartListDic.Count == enumLists.Count && enumLists.Count > 0) { for (int i = 0; i < enumLists.Count; i++) { if (enumLists[i] == ChartEnum.AreaChart)//区域图 1 { AreaSeries s = new AreaSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.BarChart)//条形图 2 { BarSeries s = new BarSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.BubbleChart)//气泡图 3 { BubbleSeries s = new BubbleSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.ColumnChart)//柱状图 4 { ColumnSeries s = new ColumnSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.LineChart)//线性图 5 { LineSeries s = new LineSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.ScatterChart)//散点图 6 { ScatterSeries s = new ScatterSeries(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsSelectionEnabled = true; MyMixedChart.Series.Add(s); } else if (enumLists[i] == ChartEnum.Stacked100Area)//百分比堆积区域图 9 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stacked100Area.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.Stacked100Bar)//百分比堆积条形图 10 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stacked100Bar.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.Stacked100Column)//百分比堆积柱状图 11 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stacked100Column.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.Stacked100Line)//百分比堆积折线图 12 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; s.ItemsSource = chartListDic[i]; stacked100Line.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.StackedArea)//堆积区域图 13 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stackedArea.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.StackedBar)//堆积条形图 14 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stackedBar.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.StackedColumn)//堆积柱状图 15 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stackedColumn.SeriesDefinitions.Add(s); } else if (enumLists[i] == ChartEnum.StackedLine)//堆积折线图 16 { SeriesDefinition s = new SeriesDefinition(); s.Title = chartListDic[i].First().Description; s.ItemsSource = chartListDic[i]; s.IndependentValueBinding = new Binding { Path = new PropertyPath("Name") }; s.DependentValueBinding = new Binding { Path = new PropertyPath("Value") }; s.IsTapEnabled = true; stackedLine.SeriesDefinitions.Add(s); } } //堆积图 if (enumLists.First() == ChartEnum.Stacked100Area) { Stacked100Area.Series.Clear(); hideAllFilpButThis(Stacked100AreaFlip); Stacked100Area.Title = chartListDic[0].First().Title; Stacked100Area.Series.Add(stacked100Area); } else if (enumLists.First() == ChartEnum.Stacked100Bar) { Stacked100Bar.Series.Clear(); hideAllFilpButThis(Stacked100BarFlip); Stacked100Bar.Title = chartListDic[0].First().Title; Stacked100Bar.Series.Add(stacked100Bar); } else if (enumLists.First() == ChartEnum.Stacked100Column) { Stacked100Column.Series.Clear(); hideAllFilpButThis(Stacked100ColumnFlip); Stacked100Column.Title = chartListDic[0].First().Title; Stacked100Column.Series.Add(stacked100Column); } else if (enumLists.First() == ChartEnum.Stacked100Line) { Stacked100Line.Series.Clear(); hideAllFilpButThis(Stacked100LineFlip); Stacked100Line.Title = chartListDic[0].First().Title; Stacked100Line.Series.Add(stacked100Line); } else if (enumLists.First() == ChartEnum.StackedArea) { StackedArea.Series.Clear(); hideAllFilpButThis(StackedAreaFlip); StackedArea.Title = chartListDic[0].First().Title; StackedArea.Series.Add(stackedArea); } else if (enumLists.First() == ChartEnum.StackedBar) { StackedBar.Series.Clear(); hideAllFilpButThis(StackedBarFlip); StackedBar.Title = chartListDic[0].First().Title; StackedBar.Series.Add(stackedBar); } else if (enumLists.First() == ChartEnum.StackedColumn) { StackedColumn.Series.Clear(); hideAllFilpButThis(StackedColumnFlip); StackedColumn.Title = chartListDic[0].First().Title; StackedColumn.Series.Add(stackedColumn); } else if (enumLists.First() == ChartEnum.StackedLine) { StackedLine.Series.Clear(); hideAllFilpButThis(StackedLineFlip); StackedLine.Title = chartListDic[0].First().Title; StackedLine.Series.Add(stackedLine); } else { hideAllFilpButThis(MixedChartFlip); MyMixedChart.Title = chartListDic[0].First().Title; } } } /// <summary> /// 隐藏所有FlipView除了传递过来的 /// </summary> /// <param name="sender"></param> public void hideAllFilpButThis(FlipView sender) { MixedChartFlip.Visibility = Visibility.Collapsed; Stacked100AreaFlip.Visibility = Visibility.Collapsed; Stacked100BarFlip.Visibility = Visibility.Collapsed; Stacked100ColumnFlip.Visibility = Visibility.Collapsed; Stacked100LineFlip.Visibility = Visibility.Collapsed; StackedAreaFlip.Visibility = Visibility.Collapsed; StackedBarFlip.Visibility = Visibility.Collapsed; StackedColumnFlip.Visibility = Visibility.Collapsed; StackedLineFlip.Visibility = Visibility.Collapsed; sender.Visibility = Visibility.Visible; } } }
1、页面XMAL
<Page x:Class="ChartForWin8.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:ChartForWin8" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions> <ColumnDefinition></ColumnDefinition> <ColumnDefinition></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition Height="6*"></RowDefinition> </Grid.RowDefinitions> <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Grid.Row="0" Content="GotoSingleChart" Click="GotoSingleChart_Click" ></Button> <Button HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Grid.Row="0" Content="GotoMixedChart" Click="GotoMixedChart_Click"></Button> <Grid x:Name="singleChart" Grid.Row="1" Grid.Column="0"></Grid> <Grid Grid.Row="1" Grid.Column="1" x:Name="mixedChart"></Grid> </Grid> </Page>
using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using Windows.Foundation; using Windows.Foundation.Collections; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; using Windows.UI.Xaml.Data; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Navigation; // “空白页”项模板在 http://go.microsoft.com/fwlink/?LinkId=234238 上有介绍 namespace ChartForWin8 { /// <summary> /// 可用于自身或导航至 Frame 内部的空白页。 /// </summary> public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } /// <summary> /// 在此页将要在 Frame 中显示时进行调用。 /// </summary> /// <param name="e">描述如何访问此页的事件数据。Parameter /// 属性通常用于配置页。</param> protected override void OnNavigatedTo(NavigationEventArgs e) { } private void GotoMixedChart_Click(object sender, RoutedEventArgs e) { #region 混合图形 Random rd = new Random(); //图形类型集合 ObservableCollection<ChartEnum> enumLists = new ObservableCollection<ChartEnum>(); //数据集合字典 Dictionary<int, ObservableCollection<UserChart>> Dic = new Dictionary<int, ObservableCollection<UserChart>>(); ObservableCollection<UserChart> items1 = new ObservableCollection<UserChart>(); items1.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); items1.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); items1.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); items1.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); items1.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); ChartEnum chartEnum1 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; enumLists.Add(chartEnum1); Dic.Add(0, items1); ObservableCollection<UserChart> items2 = new ObservableCollection<UserChart>(); items2.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); items2.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); items2.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第二季度", Title = "" }); items2.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); items2.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); ChartEnum chartEnum2 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; enumLists.Add(chartEnum2); Dic.Add(1, items2); ObservableCollection<UserChart> items3 = new ObservableCollection<UserChart>(); items3.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); items3.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); items3.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); items3.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); items3.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); ChartEnum chartEnum3 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; enumLists.Add(chartEnum3); Dic.Add(2, items3); ObservableCollection<UserChart> items4 = new ObservableCollection<UserChart>(); items4.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); items4.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); items4.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); items4.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); items4.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); ChartEnum chartEnum4 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; enumLists.Add(chartEnum4); Dic.Add(3, items4); int temp = rd.Next(1, 17); //if (temp >= 9) //{ // enumLists[0] = (ChartEnum)temp; // enumLists[1] = (ChartEnum)temp; // enumLists[2] = (ChartEnum)temp; // enumLists[3] = (ChartEnum)temp; //} if (temp == 7 || temp == 8) { enumLists[0] = (ChartEnum)1; enumLists[1] = (ChartEnum)1; enumLists[2] = (ChartEnum)1; enumLists[3] = (ChartEnum)1; } //temp = 16; //enumLists[0] = (ChartEnum)temp; //enumLists[1] = (ChartEnum)temp; //enumLists[2] = (ChartEnum)temp; //enumLists[3] = (ChartEnum)temp; MixedChart mc = new MixedChart(Dic,enumLists); mixedChart.Children.Clear(); mixedChart.Children.Add(mc); #endregion } private void GotoSingleChart_Click(object sender, RoutedEventArgs e) { Random rd = new Random(); #region 单一图形 ObservableCollection<UserChart> items = new ObservableCollection<UserChart>(); items.Add(new UserChart { Name = "一月", Value = rd.Next(10, 100), Description = "单位:亿元", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "二月", Value = rd.Next(10, 100), Description = "CaroGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "三月", Value = rd.Next(10, 100), Description = "EvaGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "四月", Value = rd.Next(10, 100), Description = "GwendolynGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "五月", Value = rd.Next(10, 100), Description = "SandraGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "六月", Value = rd.Next(10, 100), Description = "CharlesGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "七月", Value = rd.Next(10, 100), Description = "MarkGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "八月", Value = rd.Next(10, 100), Description = "BillGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "九月", Value = rd.Next(10, 100), Description = "VincentGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "十月", Value = rd.Next(10, 100), Description = "WilliamGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "十一月", Value = rd.Next(10, 100), Description = "VincentGrad", Title = "2014 上海 CPI年率" }); items.Add(new UserChart { Name = "十二月", Value = rd.Next(10, 100), Description = "WilliamGrad", Title = "2014 上海 CPI年率" }); SingleChart sc = new SingleChart(items, (ChartEnum)rd.Next(1, 9), false); singleChart.Children.Clear(); singleChart.Children.Add(sc); #endregion //#region 混合图形 //Random rd = new Random(); ////图形类型集合 //ObservableCollection<ChartEnum> enumLists = new ObservableCollection<ChartEnum>(); ////数据集合字典 //Dictionary<int, ObservableCollection<UserChart>> Dic = new Dictionary<int, ObservableCollection<UserChart>>(); //ObservableCollection<UserChart> items1 = new ObservableCollection<UserChart>(); //items1.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); //items1.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); //items1.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); //items1.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); //items1.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第一季度", Title = "2014 CPI年率" }); //ChartEnum chartEnum1 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; //enumLists.Add(chartEnum1); //Dic.Add(0, items1); //ObservableCollection<UserChart> items2 = new ObservableCollection<UserChart>(); //items2.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); //items2.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); //items2.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第二季度", Title = "" }); //items2.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); //items2.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第二季度", Title = "2014 CPI年率" }); //ChartEnum chartEnum2 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; //enumLists.Add(chartEnum2); //Dic.Add(1, items2); //ObservableCollection<UserChart> items3 = new ObservableCollection<UserChart>(); //items3.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); //items3.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); //items3.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); //items3.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); //items3.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第三季度", Title = "2014 CPI年率" }); //ChartEnum chartEnum3 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; //enumLists.Add(chartEnum3); //Dic.Add(2, items3); //ObservableCollection<UserChart> items4 = new ObservableCollection<UserChart>(); //items4.Add(new UserChart { Name = "Amy", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); //items4.Add(new UserChart { Name = "Caroline", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); //items4.Add(new UserChart { Name = "Eva", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); //items4.Add(new UserChart { Name = "Gwendolyn", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); //items4.Add(new UserChart { Name = "Sandra", Value = rd.Next(10, 100), Description = "第四季度", Title = "2014 CPI年率" }); //ChartEnum chartEnum4 = (ChartEnum)rd.Next(1, 7);//ChartEnum.BarChart; //enumLists.Add(chartEnum4); //Dic.Add(3, items4); //int temp = rd.Next(1, 17); //if (temp >= 9) //{ // enumLists[0] = (ChartEnum)temp; // enumLists[1] = (ChartEnum)temp; // enumLists[2] = (ChartEnum)temp; // enumLists[3] = (ChartEnum)temp; //} //MixedChart mm = new MixedChart(Dic, enumLists); //mixedChart.Children.Clear(); //mixedChart.Children.Add(mm); //#endregion } } }
1、SingleChart图
饼状图
复合图,线性图和柱状图
有单位区域图
2、MixedChart图
百分比堆积区域图
百分比堆积条形图
百分比堆积折线图
百分比堆积柱状图
堆积区域图
堆积条形图
堆积折线图
堆积柱状图
复合图
复合图1
3、单组数据多组数据对比图
气泡图
区域图
散点图
条形图
线性图
柱状图