WPF在循环中画线似乎只画一条线

本文关键字:一条 WPF 循环 | 更新日期: 2023-09-27 18:12:09

我试图在for循环内绘制几条线到画布,但似乎只绘制一条。我做错了什么?

for (int x = 0; x < 10; x++)
        {
            Random rand = new Random();
            double newTop = rand.Next(0, 50);

            Line top = new Line();
            top.Stroke = Brushes.Black;
            top.StrokeThickness = 2;
            top.Width = 50;
            top.X1 = x * top.Width;
            top.Y1 = 0;
            top.X2 = x * top.Width + top.Width;
            top.Y2 = newTop;
            Canvas.SetTop(top, 0);
            Canvas.SetLeft(top, x * top.Width);
            TheCanvas.Children.Add(top);
        }

谢谢,Tarran

WPF在循环中画线似乎只画一条线

您可能每次都从随机生成器获得相同的值:

默认种子值来自系统时钟,具有有限的分辨率。因此,通过调用默认构造函数连续创建的不同Random对象将具有相同的默认种子值,因此将产生相同的随机数集。"

参见随机构造函数。

我建议移动

这行
Random rand = new Random();

在循环前。


此外,似乎从第二步开始,您正在画布之外绘制。试试下面的代码:

Random rand = new Random();
for (int x = 0; x < 10; x++)
{
    double newTop = rand.Next(0, 50);
    Line top = new Line();
    top.Stroke = Brushes.Black;
    top.StrokeThickness = x + 1;
    top.Width = 500;
    int width = 50;
    top.X1 = x * width;
    top.Y1 = 0;
    top.X2 = x * width + width;
    top.Y2 = newTop;
    Canvas.SetTop(top, 0);
    Canvas.SetLeft(top, 0 /*x * top.Width*/);
    TheCanvas.Children.Add(top);
}

你一遍又一遍地画同一条线,你需要用不同的东西作为随机数的种子。

Random rand = new Random(Guid.NewGuid().GetHashCode());

您的另一个选择是将随机创建移到循环之外,并使用Next,就像您所做的那样。我建议使用这个选项:

Random rand = new Random();
for (int x = 0; x < 10; x++)
    {
        double newTop = rand.Next(0, 50);
        Line top = new Line();
        top.Stroke = Brushes.Black;
        top.StrokeThickness = 2;
        top.Width = 50;
        top.X1 = x * top.Width;
        top.Y1 = 0;
        top.X2 = x * top.Width + top.Width;
        top.Y2 = newTop;
        Canvas.SetTop(top, 0);
        Canvas.SetLeft(top, x * top.Width);
        TheCanvas.Children.Add(top);
    }

这将防止Random每次重新播种