2

チャートの凡例オブジェクト内のテキストの配置をどのように設定しますか? 私は使用してみました:

 myChartName.Legends["mySeriesName"].Alignment = stringAlignment.Near 

効果なし。また、カスタムの凡例項目を作成しようとしましたが、やはり効果がありません。テキストは、凡例の「ボックス」内で常に (シリーズ マーカーと共に) 中央に配置されます。揃えることができた唯一のテキストはタイトルですが、アプリケーションにタイトルは必要ありません。

これまでの私の調査によると、凡例オブジェクトは基本的に (デフォルトで) 2 つのセルを持つテーブルです。その場合、それらのセルにアクセスして表のセルとして操作する方法が必要です。それで、何が得られますか?凡例オブジェクトのテキスト配置プロパティにアクセスできないのはなぜですか? 明らかに、私には欠けているものがありますが、私の人生では、これを理解できないようです. かなりイライラします。

4

3 に答える 3

2

問題が解決しました。CustomItem アプローチもうまくいかなかったので、LegendCellColumn クラスを使用してみました。

LegendStyle を Column から Row に変更し、2 つの CellColumn を追加しました。1 つはシリーズ シンボル用で、もう 1 つは凡例テキスト用です。配置、マージン、および列幅 (これがトリックであることが判明しました) を設定すると、出来上がりです。私が望むように見える伝説。同様の問題を抱えている人のためのコードは次のとおりです。

chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.SeriesSymbol, ""));
chartSel.Legends[ySeries.Name].CellColumns[0].Alignment = ContentAlignment.TopLeft;
chartSel.Legends[ySeries.Name].CellColumns[0].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[0].MinimumWidth = 250;
chartSel.Legends[ySeries.Name].CellColumns[0].MaximumWidth = 250;

chartSel.Legends[ySeries.Name].CellColumns.Add(new LegendCellColumn("", LegendCellColumnType.Text, ySeries.Name));
chartSel.Legends[ySeries.Name].CellColumns[1].Alignment = ContentAlignment.MiddleLeft;
chartSel.Legends[ySeries.Name].CellColumns[1].Margins = new System.Windows.Forms.DataVisualization.Charting.Margins(0, 0, 1, 1);
chartSel.Legends[ySeries.Name].CellColumns[1].MinimumWidth = 1500;
chartSel.Legends[ySeries.Name].CellColumns[1].MaximumWidth = 1500;

これはおそらく最も効率的な方法ではありませんが、機能します。技術的には、凡例の記号とテキストは依然としてオブジェクトの中央に配置されていますが、2 つの列の幅を強制しているため、左詰めのように見えます。

うまくいけば、これは私のような別の初心者が驚愕の日々を避けるのに役立つかもしれません.

于 2012-10-17T19:09:23.050 に答える
0

私の理解では、Legend配置はDockingプロパティに関連しており、凡例内でテキストがどのように配置されているかではありません。したがってAlignment、Near に設定すると、凡例ボックスがDocking方向の近くに配置されます。

これを文章で説明するのはかなり難しいです。MS Chart SamplesChart features -> Legends -> Style and Auto Positioningには、これら 2 つのプロパティを操作し、それらがどのように機能するかを理解するのに役立つ名前のサブセクションがあります。

Legend.CustomItems内部の凡例の配置については、個別に使用および定義する必要がある場合がありますLegendCell

chart.Legends["Default"].CustomItems.Clear();
chart.Legends["Default"].CustomItems.Add(new LegendItem("LegendItem", Color.Red, ""));
chart.Legends["Default"].CustomItems[0].Cells.Add(new LegendCell(LegendCellType.Text, "My text", ContentAlignment.MiddleLeft));

これはChart features -> Legends -> Legend Cells、サンプルのセクション内で説明されています。

于 2012-10-16T15:30:37.540 に答える
0

これを理解しようとし続けているうちに、次の MSDN ライブラリ ページからこのちょっとした情報に出くわしました。

http://msdn.microsoft.com/en-us/library/dd456711(v=vs.100).aspx

"注: Chart.Legends コレクション内の個々の凡例項目およびセルを調整することはできません。それらを調整するには、カスタムの凡例項目を使用してください。"

では、CustomItem ルートに戻ります。このコードはいくつかの情報源から収集しました (Dominique さん、ありがとうございます)。

chartSel.Legends.Add(ySeries.Name);
chartSel.Series[ySeries.Name].IsVisibleInLegend = false;
chartSel.Legends[ySeries.Name].CustomItems.Clear();
LegendItem li = new LegendItem();
li.ImageStyle = LegendImageStyle.Line;
li.Cells.Add(LegendCellType.SeriesSymbol, "", ContentAlignment.TopLeft);
li.Cells[0].BackColor = Color.CornflowerBlue; //color is only to see the cell bounds
li.Cells.Add(LegendCellType.Text, ySeries.Name, ContentAlignment.TopLeft);
li.Cells[1].BackColor = Color.Aquamarine; //color is only to see the cell bounds
chartSel.Legends[ySeries.Name].CustomItems.Add(li);

私が見つけることができるものから、それはうまくいくはずですが、そうではありません。2 つのセルを持つ凡例オブジェクトが生成されます。1 つ目は空で、2 つ目は左寄せのテキストです。画像を投稿しようとしましたが、システムは私がまだ価値がないと言っています.

シリーズシンボルのラインがない理由も謎ですが、それはまた別の問題です。テキストの位置合わせの問題は、現時点で私の主な関心事です。セル内のテキストは必要に応じて左揃えになっているように見えますが、セル自体は凡例オブジェクトの中央に配置されています。私が欲しかったものではありません。これらのセルもオブジェクト内で左揃えにしたいので、最初のセルは凡例オブジェクトの左端にあります。

アイデア?

于 2012-10-16T22:53:34.313 に答える