所以我正在努力构建一个 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 中唯一的东西是我刚刚创建的点系列,我的图表有一个新的系列类型线,但上面有点标记,以及原始的点系列。
我修改了上面的代码以删除重复项,然后我意识到某些东西正在从 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 版本不会混合系列的样式。
恐怕这是TeeChartWPF的错误,我们已经将其添加到错误列表报告中,编号为[TW16016232]。我们将尝试将其修复到即将发布的维护版本的 TeeChartFor.Net。另一方面,我建议您使用一种解决方法来解决您的问题,在这种情况下,它包括将源系列替换为点系列。
private void InitializeChart()
{
tChart1.Series.Clear();
Steema.TeeChart.WPF.Styles.Line line1 = new Steema.TeeChart.WPF.Styles.Line(tChart1.Chart);
Steema.TeeChart.WPF.Styles.Line line2 = new Steema.TeeChart.WPF.Styles.Line(tChart1.Chart);
line2.FillSampleValues();
line1.FillSampleValues();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 2; i++)
{
Steema.TeeChart.WPF.Styles.Points s = new Steema.TeeChart.WPF.Styles.Points(tChart1.Chart);
s.DataSource = tChart1[i];
tChart1[i].Visible = false;
}
}
您能告诉我们,以前的代码目前是否按预期工作吗?
我希望会有所帮助。
谢谢
此致敬意桑德拉·帕索斯
斯蒂玛支持中心http://www.steema.com/