そのため、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);
}
上記のコードを実行すると、チャートは 2 つのシリーズになります。元のシリーズと、元のシリーズとターゲットをブレンドした新しいシリーズです。
たとえば、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 Editor と比較すると、WinForms バージョンはシリーズのスタイルをブレンドしないため、この動作は意図されたものではないと思います。