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;
}
} 回复 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。 回复 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("Value"),
PointLabelTemplate = this.Resources["lbl"] as DataTemplate
}; 回复 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>
能发一个完整的代码吗? 你好,请直接参考饼图文档中的代码
如果有碰到什么问题的话,请直接描述问题
https://www.grapecity.com/componentone/docs/win/online-flexchart/pie-chart.html
页:
[1]