1

所以我正在构建一个 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 版本不会混合系列的样式。

4

1 回答 1

0

恐怕这是 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;
            }

        }

你能告诉我们,如果以前的代码现在按你预期的那样工作吗?

我希望会有所帮助。

谢谢,

最好的问候,桑德拉帕索斯

Steema 支持中心 http://www.steema.com/

于 2012-06-26T09:42:41.260 回答