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

本文关键字:系列 应用于 默认 | 更新日期: 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 主题(或在运行时更改单个系列的选项(。