c# - 如何将图表更改为列渐变填充样式?

标签 c# .net winforms

这就是我在构造函数中所做的:

drawPoints.Clear();
paintToCalaculate = false;
chart1.Invalidate();
Series S0 = chart1.Series[0];
S0.ChartType = SeriesChartType.Column;
S0.IsValueShownAsLabel = true;
chart1.Series["Series1"]["PixelPointWidth"] = "0.6";
chart1.Series["Series1"]["DrawingStyle"] = "Cylinder";
S0.Color = Color.Transparent;
S0.LegendText = "";
area.BackColor = Color.White;
area.BackSecondaryColor = Color.LightSteelBlue;
area.BackGradientStyle = GradientStyle.DiagonalRight;
area = chart1.ChartAreas[0];
chart1.Series["Series1"].Points.AddXY(10, 10);
area.AxisX.Minimum = 1;
area.AxisX.Maximum = 30;
area.AxisY.Minimum = 1;
area.AxisY.Maximum = 120;
area.AxisX.MajorGrid.LineColor = Color.LightSlateGray;
area.AxisY.MajorGrid.LineColor = Color.LightSlateGray;

问题是我正在使用图表绘制事件来绘制点和线:

Pen pen = new Pen(Color.Blue, 2.5f);
SolidBrush myBrush = new SolidBrush(Color.Red);
private void chart1_Paint(object sender, PaintEventArgs e)
{
    if (paintToCalaculate)
    {
        Series s = chart1.Series.FindByName("dummy");
        if (s == null) s = chart1.Series.Add("dummy");
        drawPoints.Clear();
        s.Points.Clear();
        foreach (PointF p in valuePoints)
        {
            s.Points.AddXY(p.X, p.Y);
            DataPoint pt = s.Points[0];
            double x = chart1.ChartAreas[0].AxisX.ValueToPixelPosition(pt.XValue);
            double y = chart1.ChartAreas[0].AxisY.ValueToPixelPosition(pt.YValues[0]);
            drawPoints.Add(new Point((int)x, (int)y));
            s.Points.Clear();
        }
        paintToCalaculate = false;
        chart1.Series.Remove(s);
    }

    foreach (Point p in drawPoints)
    {
        e.Graphics.FillEllipse(Brushes.Red, p.X - 2, p.Y - 2, 4, 4);
    }

    if (drawPoints.Count > 1)
    {
        e.Graphics.DrawLines(pen, drawPoints.ToArray());
    }
}

我希望它看起来像这样的风格:

Chart

它应该看起来像示例中的那样。但由于我正在使用绘制事件,也许这种方式是不可能的。

编辑尝试了这个解决方案,我在 form1 设计器中添加了一个新的图表控件用于测试,称为图表2。然后在构造函数中我做了:

chart2.Titles.Add(("Introducing Chart Controls"));

            ChartArea chartarea2 = new ChartArea("Main");
            chart2.ChartAreas.Add(chartarea2);

            Series seriesColumns = new Series("RandomColumns");
            seriesColumns.Color = Color.Blue;
            chart2.Series.Add(seriesColumns);
            Random rnd = new Random(10);
            for (int i = 0; i < 10; i++)
            {
                seriesColumns.Points.Add((rnd.Next(100)));
            }
            DataPoint dp = new DataPoint(seriesColumns);
            dp.Color = Color.Red;
            dp.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.LeftRight;
            seriesColumns.Points.Add(dp);

但没有淡入/淡出颜色变化。什么也没发生。

这就是图表2的样子:

chart2

最佳答案

要获得渐变效果,您不一定必须使用 Paint 事件。 DataPoint 具有 BackGradientStyle 属性,它将自动为您生成渐变。它将使用DataPoint 的颜色。您可以按照下面的示例进行设置:

var dp = new DataPoint(8D, 12D);
dp.Color = Color.Red;
dp.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.LeftRight;
var series = this.chart1.Series[0];
series.Points.Add(dp);

这里渐变正在淡出。如果您希望它传递为另一种颜色,请设置 BackSecondaryColor 属性。

dp.BackSecondaryColor = Color.Green;

关于c# - 如何将图表更改为列渐变填充样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30336305/

相关文章:

c# - Azure Blob 服务指标 : get download count for a given blob

.net - 是否有用于信用卡加密的最佳 .NET 算法?

c# - 模型去哪里了?

c# - 加起来等于给定自然数的总和组合

c# - 正则表达式 - 在线任何地方的负面回顾

c# - 将请求传递给另一个 API

c# - 如何以编程方式从动态 JObject 获取属性

.net - .NET 4 是否更改了证书请求框架在 TLS 中的应答方式

c# - SoundPlayer 在 Vista 上崩溃

c# - 如何在 Windows 窗体 C# 中执行代码时显示动画加载窗体