将默认主题应用于图表系列
本文关键字:系列 应用于 默认 | 更新日期: 2023-09-27 18:34:48
由于缺乏有关XML主题部分的信息,使用MSchart控件有些困难。
我正在以编程方式动态创建一个图表,然后使用 XML 主题文件向其添加主题。
我不知道会有多少个系列,但我正在尝试为堆叠列栏中每列的总数添加一个系列。
因此,我根据数据在 foreach 循环中创建每个系列,然后将 Total 系列添加为气泡图类型。
现在,我必须将不同的系列主题应用于"总计"系列,并让所有其他主题具有相同的主题。
我尝试在图表和主题文件中将系列命名为"总计"。真正的问题是 Template="All" 属性,因为这没有在任何地方记录,所以我不知道它是如何工作的以及如何应用的。
主题示例:
<Chart BackColor="White"
BorderWidth="2"
Palette = "None"
PaletteCustomColors="#F29E39; #007463; #E76E34; #A4A4A4; #94BBA3;"
BorderlineDashStyle="Solid"
AntiAliasing="All">
<Series>
<Series Name="Total"
BorderWidth="0"
LabelForeColor="#FF000000"
LabelFormat="C"
IsVisibleInLegend="false"
IsValueShownAsLabel="true" >
</Series>
<Series _Template_="All"
BorderWidth="0"
LabelForeColor="#AAFFFFFF"
LabelFormat="C"
CustomProperties="PointWidth=0.9, DrawingStyle=LightToDark"
IsValueShownAsLabel="false" >
</Series>
</Series>
<ChartAreas>
<ChartArea Name="Default"
_Template_="All"
BorderWidth="0">
<AxisY IsInterlaced="true"
InterlacedColor="#E8E7DC">
<MajorGrid Enabled="false" />
</AxisY>
<AxisX>
<MajorGrid Enabled="false" />
</AxisX>
</ChartArea>
</ChartAreas>
<Legends>
<Legend _Template_="All"
Alignment="Center"
LegendItemOrder="ReversedSeriesOrder"
Docking="Bottom"/>
</Legends>
</Chart>
因为我们想为现有图表区添加 Series,所以最好在代码隐藏中使用 databindXY,例如:
var query = ... select new
{
sumXValue = ..,
sumYValue = ..
} //chart datasource
chart1.datasource = query;
Series series = new Series(); series.Name = "Total";
series.ChartType = SeriesChartType.StackedColumn;
series.Points.DataBindXY(query, sumXvalue, query.sumYValue);
chart1.Series.Add(series);
这将向图表区域中的现有系列添加新系列
我知道
这是一个较旧的帖子,但我最近在尝试解决同样的问题时遇到了。如果您使用的是 XML 模板,则只需为数据中的每个序列添加一个元素,即使您在运行时添加数据,只需确保序列的顺序与添加数据的方式匹配,并且它没有任何问题。我已经测试过用这种方法做组合图,效果很好。
<Series>
<Series Name="FirstSeriesName" Borderwidth="0"></Series>
<Series Name="SecondSeriesName" Borderwidth="0"></Series>
<Series Name="ThirdSeriesName" Borderwidth="3"></Series>
</Series>
我还没有弄清楚如何将其与主题选项相结合,但不幸的是,到目前为止,看起来您必须单独设置每个系列的样式才能使用 XML 主题(或在运行时更改单个系列的选项(。