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);
}


上記のコードを実行すると、チャートは 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 バージョンはシリーズのスタイルをブレンドしないため、この動作は意図されたものではないと思います。

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 に答える