4

さまざまな長さの凡例テキストがあり、一貫したレイアウトを実現するには、凡例アイテムを凡例の左側に揃える必要があります。

|         My Legend         |

|     X what I have now     |

|  X what I have now long   |   -->  causes irregular layout

| X what I need             |

| X what I need long        |   --> nice, regular layout

明らかなことであるに違いありませんが、これを何時間も見ていて、実際の例に少しも近づいていないようです。よろしくお願いします!

編集:

円グラフを作成しようとしているので、複数の系列があり、デフォルトの凡例レイアウトの場合と同様に、それぞれに系列記号と適切な系列データポイントテキストが必要です。私の伝説の作成方法:

public Legend CreateLegend()
{
    var legend = new Legend();

    legend.Enabled = true;
    legend.Font = new Font("Arial", 11F);
    legend.ForeColor = Color.FromArgb(102, 102, 102);
    legend.InsideChartArea = "Result Chart";

    legend.Position = new ElementPosition(50, 20, 50, height);

    legend.LegendStyle = LegendStyle.Column;

    return legend;
}

そして、私のシリーズ作成方法(現在、ここでの解決策の実験/アイデアからのパラメーターとして凡例を取ります):

public Series CreateSeries(List<ChartDivision> series, Legend legend)
{
    var seriesDetail = new Series();
    seriesDetail.Name = "Result Chart";
    seriesDetail.IsValueShownAsLabel = false;
    seriesDetail.ChartType = SeriesChartType.Pie;
    seriesDetail.BorderWidth = 2;

    foreach(var datapoint in series)
    {
        var p = seriesDetail.Points.Add(datapoint.Logged);
        p.LegendText = datapoint.Name;                
    }

    seriesDetail.ChartArea = "Result Chart";
    return seriesDetail;
}
4

2 に答える 2

1

ここといえばSystem.Windows.Forms.DataVisualization.Charting.Chart。これは実際にはデフォルトの動作です。

ただし、オーバーライドできます。デザイナーでグラフを選択し、[凡例]プロパティをクリックします。適切な凡例で、CellColumns-Propertyを編集します。これはデフォルトでは空です。2つの列を追加し、最初の列を「ColumnType=SeriesSymbol」に設定して、カスタム列のデフォルトを取得できます。次に、2番目の列で、配置プロパティ(デフォルトではMiddleCenter)が探しているものになります。


これが私のテストプログラムです:http://pastebin.com/ZTwMhsXB チャートコントロールと2つのボタンをフォームに追加して実行します。しかし、私はあなたの問題を再現することができませんでした。

もう少し配線したことに注意してください。これらの行がどこかにあることを確認してください。

chart1.Legends.Add(leg);
// and
legend.Name = // whatever
seriesDetail.Legend = legend.Name;

それ以外の場合は、作成した凡例が表示されていない可能性がありますが、デフォルトの凡例が表示されている可能性があります。凡例をchartareaに追加しないと、表示されません。


さて、テキストがその列内で左寄せされた時点で、列は常に凡例領域内の中央に配置されます。解決策については、このSOスレッドを参照してください:winform mschart凡例のテキスト配置c#を制御する方法は?

次のようにコードを編集します。

legend.LegendStyle = LegendStyle.Column;
legend.CellColumns.Add(new LegendCellColumn() {
    ColumnType = LegendCellColumnType.SeriesSymbol,
    MinimumWidth = 250,
    MaximumWidth = 250
});
legend.CellColumns.Add(new LegendCellColumn()
{
    ColumnType = LegendCellColumnType.Text,
    Alignment = ContentAlignment.MiddleLeft,
    MinimumWidth = 1500,
    MaximumWidth = 1500
});

250と1500の数字はフォントサイズのパーセンテージであるため、1500はフォントの高さの15倍を意味することに注意してください。それに応じてペーストビンを更新しました(http://pastebin.com/GGCZGWF9)。これが私のサンプルプログラムのスクリーンショットです。

サンプルプログラムのスクリーンショット

于 2013-03-02T09:44:16.633 に答える
1

次のようなものを試してください。

myChart.Legends["MySeries Name"].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.Text, "MySeries Name"));
myChart.Legends["MySeries Name"].CellColumns[1].Alignment = ContentAlignment.MiddleLeft;
于 2013-03-02T19:58:44.500 に答える