将默认主题应用于图表系列

时间:2012-05-18 17:58:41

标签: c# xml data-visualization mschart

由于缺乏有关XML主题部分的信息,使用MSchart控件有点困难。

我以编程方式动态创建图表,然后使用XML主题文件向其添加主题。

我不知道会有多少系列,但我正在尝试为StackedColumnBar中的每一列添加一个系列总数。

所以我从数据中创建foreach循环中的每个系列,然后将Total系列添加为气泡图类型。

现在我必须在Total系列中应用不同的系列主题,并让所有其他主题具有相同的主题。

我尝试在图表和主题文件中命名系列“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>

2 个答案:

答案 0 :(得分:0)

因为我们想为现有的图表区域添加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);

这将在图表区域中为现有系列添加新系列

答案 1 :(得分:0)

我知道这是一篇较老的帖子,但我最近在试图解决同样的问题时遇到了这个问题。如果您使用的是XML模板,则只需为数据中的每个系列添加一个元素,即使您是在运行时添加数据,也只需确保系列的顺序与数据的添加方式相符即可。问题。我已经测试了用这种方法做组合图表并且效果很好。

<Series>
    <Series Name="FirstSeriesName" Borderwidth="0"></Series>
    <Series Name="SecondSeriesName" Borderwidth="0"></Series>
    <Series Name="ThirdSeriesName" Borderwidth="3"></Series>
</Series>

我还没想出如何将它与 Theme 选项结合起来,但是现在看来你不得不单独设置每个系列的样式以使用XML主题(或更改运行时单个系列的选项。