【发布时间】:2012-06-20 13:56:38
【问题描述】:
所以我正在构建一个 WPF TeeChart 编辑器,但我在尝试使用静态方法更改图表上的系列类型时遇到了一些问题:Steema.TeeChart.WPF.Styles.Series.ChangeType(ref Series s, Type newType)
原代码思路:
//user has selected a sample chart showing the Series Type they want
Type targetType = selectedChart.Series[0].GetType();
//SelectedItems contains Series objects already on a chart
for (int i = 0; i < SelectedItems.Count; i++)
{
Series sS = (Series) SelectedItems[i];
Series.ChangeType(ref sS, targetType);
}
当上面的代码运行时,我的图表以两个系列结束:原始系列,以及一个混合了原始系列和目标的新系列。
例如,如果我在图表上放置一个带有 4 个随机值的点系列,然后运行上面的代码,在 SelectedItems 中唯一的东西就是我刚刚创建的点系列,我的图表有一个新的系列类型 Line 但有它上面的点标记,以及原来的点系列。
我修改了上面的代码以删除重复项,然后我意识到有些东西正在从 SelectedItems 集合中删除其他项目。下面是删除原始系列的最终代码,并且在 SelectedItems 集合中有多个系列时也可以使用。
//Added List to keep selected items since they were being lost
List<Series> selected = new List<Series>(SelectedItems.Count);
for (int x = 0; x < SelectedItems.Count; x++)
selected.Add((Series) SelectedItems[x]);
for (int i = 0; i < selected.Count; i++)
{
Series sS = selected[i];
int cI = chart.Series.IndexOf(sS); //added to track index in chart
Series.ChangeType(ref sS, targetType);
//The following line ensures overwite of original Series in chart
// since new Series is being created inside above method
chart.Series[cI] = sS;
//finally, remove original Series from chart
chart.Series.Remove(selected[i]);
}
这解决了将原始系列留在图表上的问题,但我仍然无法弄清楚为什么系列的样式会变成原始系列类型和目标系列类型的某种奇怪混合。
我的方法中有什么遗漏或忽略的吗?有没有更好的方法来改变系列的类型?我在 TeeChart 文档中找不到任何有用的信息。
我不认为这种行为是有意的,因为当我将此方法获得的输出与 WinForms TeeChart 编辑器进行比较时,WinForms 版本不会混合系列的样式。
【问题讨论】: