WPF Custom Radar Map Development Example Tutorial _c# Tutorial

Source: Internet
Author: User
Tags cos sin radar

The custom radar chart is as follows:

1, create UserControl, called "Radarchartcontrol"

Front desk:

<usercontrol x:class= "Wpfapplication2.radarchartcontrol" 
 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 " 
 mc:ignorable=" D " 
 d:designheight=" "D:designwidth=" "loaded=" radarchartcontrol_onloaded ">
 <canvas x:name=" Canvaspanel "horizontalalignment=" center "verticalalignment=" Center ">
 </ Canvas>
</UserControl>

Background:

&lt;summary&gt;///radarchartcontrol.xaml Interactive logic///&lt;/summary&gt; public partial class Radarchartcontrol:use
 Rcontrol {public Radarchartcontrol () {InitializeComponent (); #region Properties///&lt;summary&gt;///size///width size///&lt;/summary&gt; public double size {get {return (Doub Le) GetValue (sizeproperty);
 } set {SetValue (Sizeproperty, value);} public static readonly DependencyProperty Sizeproperty = Dependencyproperty.register ("Size", typeof (Double), typeof (R
 Adarchartcontrol), New PropertyMetadata (400.0)); &lt;summary&gt;///title///&lt;/summary&gt; public list&lt;argumentmodel&gt; Arguments {get {return (list&lt;a rgumentmodel&gt;) GetValue (Argumentsproperty);
 } set {SetValue (Argumentsproperty, value);} public static readonly DependencyProperty Argumentsproperty = Dependencyproperty.register ("Arguments", typeof (List
 &lt;ArgumentModel&gt;), typeof (Radarchartcontrol), New PropertyMetadata (New list&lt;argumentmodel&gt; ()); ///&lt;summary&gt;///Data///&lt;/summary&gt; public list&lt;chartitem&gt; Datas {get {return (LIST&LT;CHARTITEM&G t;) GetValue (Datasproperty);
 } set {SetValue (Datasproperty, value);} public static readonly DependencyProperty Datasproperty = Dependencyproperty.register ("Datas", typeof (list&lt;
 chartitem&gt;), typeof (Radarchartcontrol), New PropertyMetadata (New list&lt;chartitem&gt; ()); &lt;summary&gt;///Gets or sets the line color///&lt;/summary&gt; public Brush BorderBrush {getting {return (Brush) GetValue (Borde Rbrushproperty);
 } set {SetValue (Borderbrushproperty, value);} public static readonly DependencyProperty Borderbrushproperty = Dependencyproperty.register ("BorderBrush", typeof (
 Brush), typeof (Radarchartcontrol), New PropertyMetadata (Brushes.royalblue));
 &lt;summary&gt;///connection point size///&lt;/summary&gt; public int ellipsesize = 7;
  &lt;summary&gt;///Control size///&lt;/summary&gt; public double totalsize {get {double size = size + 200; Return Size
 }///&lt;summary&gt;///panel///&lt;/summary&gt; public Canvas Chartcanvas = new Canvas (); Declaring and registering routed events public static readonly RoutedEvent titleclickroutedevent = eventmanager.registerroutedevent ("Titleclick",
 Routingstrategy.bubble, typeof (Eventhandler&lt;routedeventargs&gt;), typeof (Radarchartcontrol)); CLR event wrapper public event Routedeventhandler Titleclick {add {this. AddHandler (titleclickroutedevent, value); } remove {this. RemoveHandler (titleclickroutedevent, value); }///Excitation routed event, borrowing click event firing method protected void OnClick (object sender, RoutedEventArgs e) {RoutedEventArgs args = new Ro
  Utedeventargs (Titleclickroutedevent, E); This.
 RaiseEvent (args); #endregion private void Radarchartcontrol_onloaded (object sender, RoutedEventArgs e) {if (!).
  Checkdata ()) {throw new Exception ("Radarchart data Mismatch!");
  //Get the maximum number int maxdata = Datas.max (i =&gt; i.datalist.max (o =&gt; o.data));
  Setup Panel and background setcanvasandbackground (maxdata);
 Set Data headers Setdatatitle (Datas);
  Gets half circle size double length = SIZE/2/maxdata;
  Connection point radius int ellipser = ELLIPSESIZE/2;
  foreach (Var chartitem in Datas) {var color = Chartitem.color;
  Two polygons, one setting background, one setting border Polygon Polygonarea = new Polygon () {Fill = color, Opacity = 0.2, strokethickness = 0};
  Polygon Polygonborder = new Polygon () {Fill = brushes.transparent, Stroke = color, strokethickness = 0.8};
  int index = 0;
   foreach (var data in chartitem.datalist) {Double currentangle = Angle * index + 90;
   Double angle = (currentangle/360) * 2 * MATH.PI; var r = data.
   Data * length;
   Double x = size/2 + R * Math.Cos (angle);
   Double y = size/2-R * Math.sin (angle);
   Polygon Add node var point = new Point () {x = x, y = y};
   POLYGONAREA.POINTS.ADD (point);
   POLYGONBORDER.POINTS.ADD (point);
   Set node style var ellipse = new Ellipse () {Width = ellipsesize, Height = ellipsesize, Fill = color};
   Canvas.setleft (ellipse, x-ellipser); Canvas.setTop (ellipse, y-ellipser);
   CHARTCANVAS.CHILDREN.ADD (ellipse);
  index++;
  } ChartCanvas.Children.Add (Polygonarea);
  CHARTCANVAS.CHILDREN.ADD (Polygonborder);
 //Set the title setarguments (); ///&lt;summary&gt;///Set data title///&lt;/summary&gt;///&lt;param name= "datas" &gt;&lt;/param&gt; private void SETDA
  Tatitle (list&lt;chartitem&gt; datas) {radarcharttitlelist titlelist = new Radarcharttitlelist ();
  Titlelist.itemsoure = datas;
  Double angle = Math.PI * 0.25;
  Double x = totalsize/2 + (TOTALSIZE/2) * Math.sin (angle);
  Canvas.setleft (titlelist, x);
  Canvas.settop (titlelist, x);
 CANVASPANEL.CHILDREN.ADD (titlelist);
  ///&lt;summary&gt;///set title///&lt;/summary&gt; private void setarguments () {int index = 0;
  foreach (var argument in Arguments) {var button = new Chartbutton (); button. Content = argument.
  Name; button. Icon = argument.
  Iconsource; button.
  Mybutton.click + = OnClick;
  Draw xy Double currentangle = Angle * index + 90; Double Angle = (currentangle/360) * 2 * MATH.PI;
  var r = TOTALSIZE/2; Double x = R + R * Math.Cos (angle)-(button.
  WIDTH/2); Double y = r-r * Math.sin (angle)-(button.
  HEIGHT/2); Add button height difference y = y + math.sin (angle) * (button. WIDTH/2-button.
  HEIGHT/2);
  Canvas.setleft (button, x);
  Canvas.settop (button, y);
  CANVASPANEL.CHILDREN.ADD (button);
  index++;
 }///&lt;summary&gt;///check data///&lt;/summary&gt;///&lt;returns&gt;&lt;/returns&gt; private bool Checkdata ()
  {if (Datas = null) {return false; foreach (var data in Datas) {bool result =! Datas.any (i =&gt; i.datalist.count!= data.
  Datalist.count);
  if (!result) {return false;
 } return true; ///&lt;summary&gt;///Settings panel and background///&lt;/summary&gt;///&lt;param name= "Maxindex" &gt;&lt;/param&gt; private void S
  Etcanvasandbackground (int maxindex) {canvaspanel.height = TotalSize;
  Canvaspanel.width = totalsize;
  Panel chartcanvas.height = Size; Chartcanvas.width= Size;
  Double canvasx = (totalsize-size)/2;
  Canvas.setleft (Chartcanvas, canvasx);
  Canvas.settop (Chartcanvas, canvasx);
  CANVASPANEL.CHILDREN.ADD (Chartcanvas);
  Circle and Straight line var color = BorderBrush;
  Double length = SIZE/2/Maxindex;
  for (int i = 0; i &lt; Maxindex i++) {Double height = length * 2 * (i + 1);
  Double left = size/2-Length * (i + 1);
  var ellipse = new Ellipse () {Stroke = color, strokethickness = 0.5, height = height, Width = height};
  Canvas.setleft (ellipse, left);
  Canvas.settop (ellipse, left);
  CHARTCANVAS.CHILDREN.ADD (ellipse); //Temporarily set: 4 titles, draw line if (Arguments.count = 4) {//Vertical line path Verticalpath = new Path () {Stroke = color, St
  Rokethickness = 0.2,};
  Add data streamgeometry geometry = new StreamGeometry (); Geometry. FillRule = Fillrule.nonzero; Sound before F0 or F1, now is the F1 using (streamgeometrycontext CTX = geometry. Open ()) {ctx.
   Beginfigure (new Point (SIZE/2, 0), true, true); CTx. LineTo (new Point (SIZE/2, SiZe), true, false); } geometry.
  Freeze ();
  Verticalpath.data = geometry;
  CHARTCANVAS.CHILDREN.ADD (Verticalpath);
  Horizontal line Path Horizontalpath = new Path () {Stroke = color, strokethickness = 0.2,};
  Add Data Geometry = new StreamGeometry (); Geometry. FillRule = Fillrule.nonzero; Sound before F0 or F1, now is the F1 using (streamgeometrycontext CTX = geometry. Open ()) {ctx.
   Beginfigure (new Point (0, SIZE/2), true, true); CTx.
  LineTo (new Point (Size, SIZE/2), true, false); } geometry.
  Freeze ();
  Horizontalpath.data = geometry;
  CHARTCANVAS.CHILDREN.ADD (Horizontalpath); }}///&lt;summary&gt;///separator angle///&lt;/summary&gt; private double Angle {get {int count = Arguments.count
  ;
  Double angle = 360/count;
  return angle; }}///&lt;summary&gt;///class Header///&lt;/summary&gt; public class Argumentmodel {public ImageSource Iconsource
 {get; set;}
 public string Name {get; set;} ///&lt;summary&gt;///Single Group data///&lt;/summary&gt; public CLASS Chartitem {public Brush Color {get; set;}
 list&lt;chartdata&gt; dataList = new list&lt;chartdata&gt; ();
  Public list&lt;chartdata&gt; DataList {get {return DataList;}
 set {dataList = value;}
 Public object Name {get; set;}
 ///&lt;summary&gt;///Data///&lt;/summary&gt; public class ChartData {public string Name {get; set;}
 public int Data {get; set;} }

2, create the Title Class button control, the definition name is Chartbutton

Front desk:

&lt;usercontrol x:class= "Wpfapplication2.chartbutton" 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 "mc:ignorable=" D "d:desig nheight= "d:designwidth=" loaded= "chartbutton_onloaded" &gt; &lt;UserControl.Resources&gt; &lt;style Targettype= "button" &gt; &lt;setter property= "Foreground" value= "white" &gt;&lt;/Setter&gt; &lt;/Style&gt; &lt;/ usercontrol.resources&gt; &lt;Grid&gt; &lt;button x:name= "MyButton" verticalalignment= "Center" horizontalalignment= ' Center ' &gt; &lt;Button.Template&gt; &lt;controltemplate targettype= ' {x:type button} ' &gt; &lt;grid x:name= ' Buttongr ID "height=" {TemplateBinding Height} "&gt; &lt;rectangle x:name=" buttonretc "radiusx=" radiusy= "stroke=" # Ff06ffe8 "&gt;&lt;/Rectangle&gt; &lt;stackpanel orientation=" Horizontal "MarGin= "20,5" horizontalalignment= "Center" &gt; &lt;rectangle height= "{Binding iconheight}" width= "{Binding iconwidth}" &
    Gt 
    &lt;Rectangle.Fill&gt; &lt;imagebrush imagesource= "{Binding Icon}" &gt;&lt;/ImageBrush&gt; &lt;/Rectangle.Fill&gt; &lt;/Rectangle&gt; &lt;textblock x:name= "Buttontextblock" text= "{templatebinding Content}" foreground= "{Templateb Inding foreground} "margin=" 8,-2,0,0 "fontsize=" verticalalignment= "center" textalignment= "center" &gt;&lt;/ textblock&gt; &lt;/StackPanel&gt; &lt;/Grid&gt; &lt;ControlTemplate.Triggers&gt; &lt;datatrigger binding= "{Bin Ding elementname=mybutton,path=isfocused} "value=" True "&gt; &lt;DataTrigger.Setters&gt; &lt;setter targetname=" But Tonretc "property=" Fill "value=" #FFA9BCFF "&gt;&lt;/Setter&gt; &lt;setter targetname=" buttonretc "property=" StrokeThickness "value=" 0.5 "&gt;&lt;/Setter&gt; &lt;setter targetname=" Buttontextblock "property=" foreground "Value = "#FF06FFE8" &gt;&lt;/Setter&gt; &lt;/datatrigger.setters&gt; &lt;/DataTrigger&gt; &lt;datatrigger binding= "{Binding elementname=mybutton,path=ispressed}" V Alue= "true" &gt; &lt;DataTrigger.Setters&gt; &lt;setter targetname= "Buttontextblock" property= "FontWeight" value= "B Old "&gt;&lt;/Setter&gt; &lt;/DataTrigger.Setters&gt; &lt;/DataTrigger&gt; &lt;datatrigger binding=" {Binding Elem  Entname=mybutton,path=isfocused} "value= false" &gt; &lt;DataTrigger.Setters&gt; &lt;setter targetname= "Buttonretc" Property= "Fill" value= "Transparent" &gt;&lt;/Setter&gt; &lt;setter targetname= "Buttonretc" StrokeThickness "value=" 0 "&gt;&lt;/Setter&gt; &lt;/DataTrigger.Setters&gt; &lt;/DataTrigger&gt; &lt;/controltemp Late. triggers&gt; &lt;/ControlTemplate&gt; &lt;/Button.Template&gt; &lt;/Button&gt; &lt;/Grid&gt; &lt;/UserControl&gt;

Background:

&lt;summary&gt;///chartbutton.xaml Interactive logic///&lt;/summary&gt; public partial class Chartbutton:usercontrol {
 Public Chartbutton () {InitializeComponent (); #region Properties///&lt;summary&gt;///tooltip///&lt;/summary&gt; public string ToolTip {get {return (string) getval UE (TOOLTIPPROPERTY);
 } set {SetValue (Tooltipproperty, value);} public static readonly DependencyProperty Tooltipproperty = Dependencyproperty.register ("ToolTip", typeof (String), Ty
 Peof (Chartbutton), New PropertyMetadata ()); &lt;summary&gt;///button Content///&lt;/summary&gt; public string content {get {return (string) GetValue (contentprope Rty);
 } set {SetValue (Contentproperty, value);} public static readonly DependencyProperty Contentproperty = Dependencyproperty.register ("Content", typeof (String), Ty
 Peof (Chartbutton), New PropertyMetadata ("button")); &lt;summary&gt;///icon///&lt;/summary&gt; public imagesource icon {get {return (ImageSource) GetValue (Iconpro Perty);
 } set {SetValue (Iconproperty, value);} public static readonly DependencyProperty Iconproperty = Dependencyproperty.register ("Icon", typeof (ImageSource), Typ
 EOF (Chartbutton), New PropertyMetadata ()); &lt;summary&gt;///icon Height///&lt;/summary&gt; public double Iconheight {get {return (double) GetValue (Iconheigh Tproperty);
 } set {SetValue (Iconheightproperty, value);} public static readonly DependencyProperty Iconheightproperty = Dependencyproperty.register ("Iconheight", typeof (
 Double), typeof (Chartbutton), new PropertyMetadata (25.0)); &lt;summary&gt;///icon width///&lt;/summary&gt; public double Iconwidth {get {return (double) GetValue (ICONWIDTHP Roperty);
 } set {SetValue (Iconwidthproperty, value);} public static readonly DependencyProperty Iconwidthproperty = Dependencyproperty.register ("Iconwidth", typeof (double
 ), typeof (Chartbutton), new PropertyMetadata (25.0));
&lt;summary&gt;///height///&lt;/summary&gt; public double height {get {return (double) GetValue (Heightproperty);}
 set {SetValue (Heightproperty, value);} public static readonly DependencyProperty Heightproperty = Dependencyproperty.register ("Height", typeof (Double), type
 Of (Chartbutton), New PropertyMetadata (46.0)); &lt;summary&gt;///width///&lt;/summary&gt; public double Width {get {return (double) GetValue (Widthproperty);
 } set {SetValue (Widthproperty, value);} public static readonly DependencyProperty Widthproperty = Dependencyproperty.register ("Width", typeof (Double), typeof
 (Chartbutton), New PropertyMetadata (170.0));
  #endregion private void Chartbutton_onloaded (object sender, RoutedEventArgs e) {mybutton.tooltip = ToolTip;
  Mybutton.content = Content;
  Mybutton.width = Width;
  Mybutton.height = Height; if (icon!= null) {Mybutton.datacontext = new Chartbuttonmodel () {icon = icon, Iconheight = Iconheight, I
  Conwidth = Iconwidth}; }} public class Chartbuttonmodel {public IMagesource Icon {get; set;}
 Public double iconheight {get; set;}
 Public double iconwidth {get; set;} }

3, define the Data group title display list

Front desk:

&lt;usercontrol x:class= "wpfapplication2.radarcharttitlelist" 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 "mc:ignorable=" D "d:designheight=", "d:designwidth=" loaded= "radarcharttitlelist_onloaded" &gt; &lt;UserC Ontrol. resources&gt; &lt;style x:key= "Itemcontainer" targettype= "{x:type ListBoxItem}" &gt; &lt;setter Property= "Template"  &gt; &lt;Setter.Value&gt; &lt;controltemplate targettype= "{x:type ListBoxItem}" &gt; &lt;border x:name= "Iconborder" background= "Transparent" cornerradius= "4" borderthickness= "0" &gt; &lt;contentpresenter/&gt; &lt;/Border&gt; &l T  controltemplate.triggers&gt; &lt;trigger property= "isselected" value= "true" &gt; &lt;setter targetname= "IconBorder" property= "BitmapEffect" &gt; &lt;Setter.Value&gt; &lt;outErglowbitmapeffect glowcolor= "Transparent" glowsize= "5"/&gt; &lt;/Setter.Value&gt; &lt;/Setter&gt; &lt;/trig ger&gt; &lt;/ControlTemplate.Triggers&gt; &lt;/ControlTemplate&gt; &lt;/Setter.Value&gt; &lt;/Setter&gt; &lt;/s tyle&gt; &lt;/UserControl.Resources&gt; &lt;Grid&gt; &lt;listbox x:name= "MyListBox" itemssource= "{Binding}" Itemcontainerstyle= ' {StaticResource Itemcontainer} ' focusvisualstyle= ' {x:null} ' &gt; &lt;ListBox.Template&gt; &lt; controltemplate&gt; &lt;stackpanel background= "Transparent" isitemshost= "True" &gt;&lt;/StackPanel&gt; &lt;/ controltemplate&gt; &lt;/ListBox.Template&gt; &lt;ListBox.ItemTemplate&gt; &lt;DataTemplate&gt; &lt;grid Horizont Alalignment= "left" verticalalignment= "Center" background= "Transparent" &gt; &lt;Grid.ColumnDefinitions&gt; &lt;colu Mndefinition width= "Auto" &gt;&lt;/ColumnDefinition&gt; &lt;columndefinition width= "*" &gt;&lt;/columndefinition &gt; &lt;/Grid.ColumnDefinitions&gt; &lt;grid HorizonTalalignment= "Center" margin= "10,0" background= "Transparent" &gt; &lt;ellipse fill= "{Binding Color}" height= "6" width= "6" horizontalalignment= "right" verticalalignment= "Center" &gt;&lt;/Ellipse&gt; &lt;canvas verticalalignment= " Center "horizontalalignment=" Center "&gt; &lt;path fill=" {Binding Color} "height=" 5 "strokethickness=" 1 "stroke=" {Bind ing Color} "verticalalignment=" Center "data=" m-10,0 l10,0 "&gt;&lt;/Path&gt; &lt;/Canvas&gt; &lt;/Grid&gt; &lt;te Xtblock grid.column= "1" text= "{Binding Name}" foreground= "white" background= "Transparent" &gt;&lt;/TextBlock&gt; &lt; /grid&gt; &lt;/DataTemplate&gt; &lt;/ListBox.ItemTemplate&gt; &lt;/ListBox&gt; &lt;/Grid&gt; &lt;/UserControl&gt;

Background:

<summary>
 ///radarcharttitlelist.xaml Interactive logic
 ///</summary> public
 partial class Radarcharttitlelist:usercontrol
 {public
 radarcharttitlelist ()
 {
  initializecomponent ()
 }
 <summary>
 ///Data
 ///</summary> public
 list<chartitem> itemsoure
 {
  get {return (list<chartitem>) GetValue (Itemsoureproperty);}
  set {SetValue (Itemsoureproperty, value);}
 }
 public static readonly DependencyProperty Itemsoureproperty = Dependencyproperty.register ("Itemsoure", typeof (List <ChartItem>),
 typeof (Radarchartcontrol), New PropertyMetadata (New list<chartitem> ());
 private void Radarcharttitlelist_onloaded (object sender, RoutedEventArgs e)
 {this
  . DataContext = itemsoure;
 }
 

4. Interface Reference Control

&lt;window x:class= "Wpfapplication2.mainwindow" xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation
  "xmlns:x=" Http://schemas.microsoft.com/winfx/2006/xaml "xmlns:wpfapplication2=" Clr-namespace:wpfapplication2 " "MainWindow" height= "title=" width= "525" background= "Lightgray" &gt; &lt;Grid&gt; &lt;wpfapplication2: Radarchartcontrol x:name= "Radarchartcontrol" horizontalalignment= "center" verticalalignment= "Center" &gt; &lt; wpfapplication2:radarchartcontrol.arguments&gt; &lt;wpfapplication2:argumentmodel Name= "C #" IconSource= "Chart_Bar _big.png "&gt;&lt;/wpfApplication2:ArgumentModel&gt; &lt;wpfapplication2:argumentmodel name=" JAVA "iconsource=" Blueprint_blog.png "&gt;&lt;/wpfApplication2:ArgumentModel&gt; &lt;wpfapplication2:argumentmodel name=" Python " Iconsource= "Chart_graph_descending.png" &gt;&lt;/wpfApplication2:ArgumentModel&gt; &lt;wpfapplication2:
 Argumentmodel name= "VB" iconsource= "Chart_bar_big.png" &gt;&lt;/wpfApplication2:ArgumentModel&gt;   &lt;wpfapplication2:argumentmodel name= "Other" iconsource= "Chart_graph_descending.png" &gt;&lt;/wpfApplication2: Argumentmodel&gt; &lt;/wpfApplication2:RadarChartControl.Arguments&gt; &lt;wpfapplication2: radarchartcontrol.datas&gt; &lt;wpfapplication2:chartitem name= "candidate A" color= "#FF07C507" &gt; &lt;wpfapplication2:c Hartitem.datalist&gt; &lt;wpfapplication2:chartdata data= "1" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfappl Ication2:chartdata data= "3" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2:chartdata data= "3" &gt;&lt;/ Wpfapplication2:chartdata&gt; &lt;wpfapplication2:chartdata data= "4" &gt;&lt;/wpfApplication2:ChartData&gt; ; Wpfapplication2:chartdata data= "4" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;/wpfapplication2: chartitem.datalist&gt; &lt;/wpfApplication2:ChartItem&gt; &lt;wpfapplication2:chartitem name= "candidate B" color= "#FF508B F3 "&gt; &lt;wpfApplication2:ChartItem.DataList&gt; &lt;wpfapplication2:chaRtdata data= "4" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2:chartdata data= "1" &gt;&lt;/ Wpfapplication2:chartdata&gt; &lt;wpfapplication2:chartdata data= "2" &gt;&lt;/wpfApplication2:ChartData&gt; Wpfapplication2:chartdata data= "1" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2:chartdata data= "1" & Gt;&lt;/wpfapplication2:chartdata&gt; &lt;/wpfApplication2:ChartItem.DataList&gt; &lt;/wpfapplication2:chartitem
      &gt; &lt;wpfapplication2:chartitem name= "candidate C" color= "#FFF73131" &gt; &lt;wpfApplication2:ChartItem.DataList&gt; &lt;wpfapplication2:chartdata data= "2" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2:chartdata Data = "2" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2:chartdata data= "3" &gt;&lt;/wpfapplication2: Chartdata&gt; &lt;wpfapplication2:chartdata data= "3" &gt;&lt;/wpfApplication2:ChartData&gt; &lt;wpfapplication2 : ChartData data= "3" &gt;&lt;/wpfapplication2:chartdata&gt; &lt;/wpfApplication2:ChartItem.DataList&gt; &lt;/wpfApplication2:ChartItem&gt; &lt;/wpfapplication2:radar chartcontrol.datas&gt; &lt;/wpfApplication2:RadarChartControl&gt; &lt;/Grid&gt; &lt;/Window&gt;

The above is a small part of the introduction of the WPF Custom radar Map Development example tutorials, I hope to help you, if you have any questions welcome to my message, small series will promptly reply to everyone, here also thank you for your support cloud Habitat community site!

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.