我正在我的应用程序中使用System.Web.UI.DataVisualization.Charting
. 我需要某些文本元素(例如图例)来包含上标文本。
我怎样才能做到这一点?
到目前为止,我已经尝试使用 HTML 标签,但它无法识别它们 - 标签按原样显示。我也找不到任何bool
允许 HTML 格式字符串的属性。
我正在我的应用程序中使用System.Web.UI.DataVisualization.Charting
. 我需要某些文本元素(例如图例)来包含上标文本。
我怎样才能做到这一点?
到目前为止,我已经尝试使用 HTML 标签,但它无法识别它们 - 标签按原样显示。我也找不到任何bool
允许 HTML 格式字符串的属性。
不幸的是,没有任何内置功能。
唯一的方法是处理 PostPaint 事件并使用一些支持复杂格式的渲染器绘制自己的文本。
例如,您可以使用能够在 Graphics 对象上绘制 html 的HtmlRenderer 。
这是一个使用示例:
public Form1()
{
InitializeComponent();
// subrscribe PostPaint event
this.chart1.PostPaint += new EventHandler<ChartPaintEventArgs>(chart1_PostPaint);
// fill the chart with fake data
var values = Enumerable.Range(0, 10).Select(x => new { X = x, Y = x }).ToList();
this.chart1.Series.Clear();
this.chart1.DataSource = values;
// series name will be replaced
var series = this.chart1.Series.Add("SERIES NAME");
series.XValueMember = "X";
series.YValueMembers = "Y";
}
void chart1_PostPaint(object sender, ChartPaintEventArgs e)
{
var cell = e.ChartElement as LegendCell;
if (cell != null && cell.CellType == LegendCellType.Text)
{
// get coordinate of cell rectangle
var rect = e.ChartGraphics.GetAbsoluteRectangle(e.Position.ToRectangleF());
var topLeftCorner = new PointF(rect.Left, rect.Top);
var size = new SizeF(rect.Width, rect.Height);
// clear the original text by coloring the rectangle (yellow just to highlight it...)
e.ChartGraphics.Graphics.FillRectangle(Brushes.Yellow, rect);
// prepare html text (font family and size copied from Form.Font)
string html = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"<div style=\"font-family:{0}; font-size:{1}pt;\">Series <sup>AAA</sup></div>",
this.Font.FontFamily.Name,
this.Font.SizeInPoints);
// call html renderer
HtmlRenderer.HtmlRender.Render(e.ChartGraphics.Graphics, html, topLeftCorner, size);
}
}
这是结果的快照: