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
您可能每次都从随机生成器获得相同的值:
默认种子值来自系统时钟,具有有限的分辨率。因此,通过调用默认构造函数连续创建的不同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
每次重新播种