【问题标题】:TeeChart WPF - Change Series Type Issues - Leaves Original, Blends StylesTeeChart WPF - 更改系列类型问题 - 保留原始,混合样式
【发布时间】: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 版本不会混合系列的样式。

【问题讨论】:

    标签: c# .net wpf teechart


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2019-09-08
      • 2023-04-06
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多