0

我正在尝试在我的画布上绘制一排矩形。当我运行以下代码时,我只得到一个矩形,即使我的画布元素说它有 12 个孩子。维度是一个具有 2 个整数属性的类,高度和宽度。我正在绘制的画布是 400 像素 x 600 像素。

Dimensions windowDimensions = new Dimensions()
        {
            Width = (int)cvsGameWindow.Width,
            Height = (int)cvsGameWindow.Height
        };

        //init rectangles
        for (int i = 0; i < windowDimensions.Width; i+=50)
        {
            Rectangle rect = new Rectangle(); //create the rectangle
            rect.StrokeThickness = 1;  //border to 1 stroke thick
            rect.Stroke = _blackBrush; //border color to black
            rect.Width = 50;
            rect.Height = 50;
            rect.Name = "box" + i.ToString();
            Canvas.SetLeft(rect,i * 50);
            _rectangles.Add(rect);
        }
        foreach (var rect in _rectangles)
        {
            cvsGameWindow.Children.Add(rect);
        }

以及在我的代码顶部声明的私有成员:

private SolidColorBrush _blackBrush = new SolidColorBrush(Colors.Black);
private SolidColorBrush _redBrush = new SolidColorBrush(Colors.Red);
private SolidColorBrush _greenBrush = new SolidColorBrush(Colors.Green);
private SolidColorBrush _blueBrush = new SolidColorBrush(Colors.Blue);
private List<Rectangle> _rectangles = new List<Rectangle>();
4

1 回答 1

3

这是罪魁祸首:

Canvas.SetLeft(rect,i * 50);

在第一个循环中i=0,您正在设置Canvas.Left = 0; 由于您的 for 循环正在执行i+=50,因此我将在第二个循环中执行此操作50,因此您将进行设置Canvas.Left = 2500。你说你的Canvasis 400x600,所以你的矩形不在屏幕上。

最简单的解决方法:使用Canvas.SetLeft(rect, i)- sincei以 50 为增量增加。

于 2013-03-10T18:07:31.610 回答