0

キャンバス全体に長方形の行を描画しようとしています。次のコードを実行すると、canvas 要素には 12 個の子があると書かれているにもかかわらず、四角形が 1 つしか取得されません。ディメンションは、Height と Width の 2 つの整数プロパティを持つクラスです。これを描いているキャンバスは400px x 600pxです。

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 = 0for ループが実行i+=50されているため、2 番目のループでは が実行される50ため、設定が行われますCanvas.Left = 2500。あなたはあなたCanvas400x600であると言ったので、あなたの長方形は画面外にあります。

最も簡単な修正: use Canvas.SetLeft(rect, i)- sinceiは 50 ずつ増加します。

于 2013-03-10T18:07:31.610 に答える