tucueltd 发表于 2015-2-6 12:52:00

WPF的饼图实时刷新后不显示百分比,如何在代码中设置?

rt,我在XAML中设置了饼图的百分比显示格式,效果图如下:



相关的XAML代码如下:
<c1chart:C1Chart Name="faultTimes" ChartType="Pie" Margin="150,0,150,0">
                <c1chart:C1Chart.Resources>
                  <DataTemplate x:Key="lbl">
                        <StackPanel>
                            <StackPanel>
                              <TextBlock Text="{Binding Path=Name}" FontSize="20"/>
                            </StackPanel>
                            <TextBlock Text="{Binding Path=PercentageSeries,Converter={x:Static c1chart:Converters.Format}, ConverterParameter=#.#%}" FontSize="20" />
                        </StackPanel>
                  </DataTemplate>
                </c1chart:C1Chart.Resources>

                <c1chart:C1Chart.Data>
                  <c1chart:ChartData>
                        <c1chart:ChartData.ItemNames>变桨 发电机 变频器 偏航</c1chart:ChartData.ItemNames>
                        <c1chart:DataSeries ItemsSource ="{Binding data}"Values="25 43.8 12.5 18.8" PointLabelTemplate="{StaticResource lbl}" HorizontalAlignment="Center" />
                  </c1chart:ChartData>
                </c1chart:C1Chart.Data>
                <c1chart:C1ChartLegend DockPanel.Dock="Right" VerticalAlignment="Bottom" FontSize="20" />
            </c1chart:C1Chart>

问题来了,我在C#文件中改变数据后,一刷新,饼图周围的百分比和项目显示就不见了,请问应该怎么写?

目前修改数据的C#代码如下:
private void drawPie()
{
       if (faultTimes.Data.Children.Count != 0)
       {
         faultTimes.Data.Children.Clear();
         keys.Clear();
       }
       createNewDataSeries();
}

private void createNewDataSeries()
{
       var data = new DataSeries()
       {
         ItemsSource = SampleItem.CreateSampleData(),
         ValueBinding = new Binding("Value"),
       };
       faultTimes.Data.Children.Add(data);
}

public class SampleItem
{
      public double Value { get; set; }

      public static SampleItem[] CreateSampleData()
      {
          var array = new SampleItem;

          for (int i = 0; i < 4; i++)
          {
            array = new SampleItem()
            {
                  Value = i+1//Double.Parse(value)
            };
          }
          return array;
      }
}

Alice 发表于 2015-2-6 16:37:00

回复 1楼tucueltd的帖子

问题在于你重置了DataSeries,但没有重新设置它的模板。

这句代码展示了,你给这个DataSeries设置了模板来展示数据,百分号和文字都是模板设置的。
<c1chart:DataSeries ItemsSource ="{Binding data}"Values="25 43.8 12.5 18.8" PointLabelTemplate="{StaticResource lbl}" HorizontalAlignment="Center" />

这句代码中,你又重新创建了DataSeries,原来的模板已经没有了。
var data = new DataSeries()
            {

                ItemsSource = SampleItem.CreateSampleData(),

                ValueBinding = new Binding("Value"),

            };

            faultTimes.Data.Children.Add(data);

解决方法:需要在cs代码中将你的模板设置给新创建的DataSeries。

tucueltd 发表于 2015-2-7 08:19:00

回复 1楼tucueltd的帖子

问题在于你重置了DataSeries,但没有重新设置它的模板。

这句代码展示了,你给这个DataSeries设置
Alice 发表于 2015-2-6 16:37:00 http://gcdn.gcpowertools.com.cn/images/common/back.gif

确实是因为没有设置模板,但是我在重置DataSerise后设置了模板也没有展示效果,所以不知道该怎么做了

不知道如下设置是否正确:
var data = new DataSeries()
{
      ItemsSource = SampleItem.CreateSampleData(value),
      ValueBinding = new Binding(&quot;Value&quot;),
               
      PointLabelTemplate = this.Resources[&quot;lbl&quot;] as DataTemplate
};

Alice 发表于 2015-2-9 13:43:00

回复 3楼tucueltd的帖子

C1Chart的类型是Pie的时候的动态绑定请参考如下代码:
1.legend项目:
public class Legendvalues
{
      public string Name { get; set; }
      public double PercentageValue { get; set; }
}

2.创建一个集合,并且给chart.Data.ItemNames赋值:
List<Legendvalues> chartlegenditems = new List<Legendvalues>();
      chartlegenditems.Add(new Legendvalues() { Name = "Mango", PercentageValue = 20.3 });
      chartlegenditems.Add(new Legendvalues() { Name = "Apple", PercentageValue = 30.1 });
      chartlegenditems.Add(new Legendvalues() { Name = "Strawberry", PercentageValue = 10.4 });
      chartlegenditems.Add(new Legendvalues() { Name = "Orange", PercentageValue = 50.2 });
      chart.Data.ItemNames = chartlegenditems;


3.xmal的绑定代码:
<c1chart:C1ChartLegend.ItemTemplate>
               <DataTemplate>
                     <StackPanelOrientation="Horizontal">
                         <CanvasWidth="24" Height="24" VerticalAlignment="Center">
                        <ContentControl Canvas.Top="2" HorizontalContentAlignment="Stretch"
                           VerticalContentAlignment="Stretch" Content="{Binding Path=Line}"
                           Width="24" Height="20"/>
                            <ContentControlHorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" Canvas.Left="5" Canvas.Top="5"Content="{Binding Path=Symbol}"Width="14" Height="14"/>
            </Canvas>
                         <TextBlockText="{Binding Path=Item.Name}" Margin="2,0,2,0" Foreground="{Binding Path=Symbol.Fill}" VerticalAlignment="Center"/>

                         <TextBlock Text="{Binding Item.PercentageValue}"Margin="2,0,2,0" Foreground="{Binding Path=Symbol.Fill}"VerticalAlignment="Center"/>

                     </StackPanel>
               </DataTemplate>
             </c1chart:C1ChartLegend.ItemTemplate>
             </c1chart:C1ChartLegend>

黑小子代码 发表于 2020-4-16 16:43:25

能发一个完整的代码吗?

Richard.Ma 发表于 2020-4-17 09:35:48

你好,请直接参考饼图文档中的代码
如果有碰到什么问题的话,请直接描述问题

https://www.grapecity.com/componentone/docs/win/online-flexchart/pie-chart.html
页: [1]
查看完整版本: WPF的饼图实时刷新后不显示百分比,如何在代码中设置?