asp.net - 如何制作asp :Chart Legend symbols vertically aligned

标签 asp.net .net mschart

我正在使用 asp.net 生成一个图表,该图表与下面的代码生成的图表类似。 请注意,每个图例条目占用三行,但符号垂直居中对齐,我认为这看起来不清楚:

Chart legend with vertically central alignment

是否可以垂直对齐符号,使其位于文本的第一行旁边(例如,第一条蓝线应位于“Some name - 1”旁边)?或者,可以配置某种分隔符吗?无论哪种方式,我都更喜欢垂直对齐,但这两个选项结合在一起会很棒。

完整演示代码:

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim chart1 As New Chart
    Page.Controls.Add(chart1)
    chart1.ChartAreas.Add(New ChartArea)
    Dim l As New Legend
    chart1.Legends.Add(l)
    Dim dt As New DataTable
    dt.Columns.Add(New DataColumn With {.ColumnName = "ColA", .DataType = GetType(System.String)})
    dt.Columns.Add(New DataColumn With {.ColumnName = "ColB", .DataType = GetType(System.Int32)})
    dt.Columns.Add(New DataColumn With {.ColumnName = "ColC", .DataType = GetType(System.Int32)})
    dt.Columns.Add(New DataColumn With {.ColumnName = "ColD", .DataType = GetType(System.Int32)})
    Dim rnd As New Random
    For i As Integer = 1 To 5
        Dim dr As DataRow = dt.NewRow
        dr.Item("ColA") = String.Format("{0} {1}", "Some name - ", i.ToString)
        dr.Item("ColB") = rnd.Next(0, 100)
        dr.Item("ColC") = rnd.Next(0, 100)
        dr.Item("ColD") = rnd.Next(0, 100)
        dt.Rows.Add(dr)
    Next
    Dim gv As New GridView
    Page.Form.Controls.Add(gv)
    gv.DataSource = dt
    gv.DataBind()
    For Each dr As DataRow In dt.Rows
        Dim s As New Series
        s.Name = dr.Item("ColA").ToString
        s.ChartType = SeriesChartType.Line
        s.LegendText = s.Name & Environment.NewLine & "Line 2" & Environment.NewLine & "Line 3"
        chart1.Series.Add(s)
        For i As Integer = 1 To dt.Columns.Count - 1
            Dim p As New DataPoint
            p.SetValueY(Convert.ToInt32(dr.Item(i)))
            p.AxisLabel = dt.Columns(i).ColumnName
            Trace.Warn(dt.Columns(i).ColumnName & " = " & Convert.ToInt32(dr.Item(i)).ToString)
            s.Points.Add(p)
        Next
    Next
    chart1.DataBind()
End Sub

最佳答案

您可以使用Chart.CustomizeLegend event自定义图例项的对齐方式和分隔符:

Imports System.Drawing

Protected Sub Chart_CustomizeLegend(sender As Object, e As CustomizeLegendEventArgs)
    For Each item As LegendItem In e.LegendItems
        ' Align the series symbol.
        item.Cells(0).Alignment = ContentAlignment.TopCenter

        ' Add a separator.
        item.SeparatorType = LegendSeparatorStyle.Line
        item.SeparatorColor = Color.LightGray
    Next
End Sub

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    Dim chart1 As New Chart

    ' Bind to the CustomizeLegend event.
    AddHandler chart1.CustomizeLegend, AddressOf Chart_CustomizeLegend

    Page.Controls.Add(chart1)
    chart1.ChartAreas.Add(New ChartArea)
    Dim l As New Legend

    ' ... The rest of your code...
End Sub

关于asp.net - 如何制作asp :Chart Legend symbols vertically aligned,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21367888/

相关文章:

.net - 在 C# 中,术语 "Primitive"和 "Literal"可以互换吗?

mschart - Microsoft Chart 控制图例项目排序

c# - 尝试使用 DataBindCrossTable 方法显示折线图总是出现条形图

c# - 查找图表中点的值

c# - ASP.NET Web API DELETE 方法错误

asp.net - 如何强制 netwtonsoft json 序列化程序将日期时间属性序列化为字符串?

c# - 在 WCF 中,操作是否总是在与消息检查器相同的线程上调用?

.net - 以非管理员用户身份运行时如何让 log4net 生成日志文件?

javascript - 如何将json日期格式转换为普通日期格式。例如 :'/Date(1388412591038)/' 到 '12-30-2013' ?

c# - Asp.Net "Instant"PM系统