【问题标题】:Creating Rectangles one under each other在彼此下方创建矩形
【发布时间】:2021-12-13 09:37:15
【问题描述】:

我有一个程序可以根据我想要的数量创建特定数量的矩形。当我创建 1 个矩形时,高度为 400,当我创建 2 个矩形时,高度为 200,当我创建 4 个矩形时,高度为 100,我想你明白我在做什么。现在我想把它们放在一起。我举三个例子。

This is how it looks like when I create 1 Rectangle

当我想创建 2 个矩形时,高度应该除以 2。我已经这样做了,这很有效,但我不能放置它们 like this under each other.

如果有人不明白我在尝试什么,再举一个例子。这就是它应该看起来的样子like when I create 5 Rectangles.

我试着像这样把它们放在一起:

Canvas.SetLeft(MyRectangle[i], Width / 2.0 - MyRectangle[i].Width / 2.0);
Canvas.SetTop(MyRectangle[i], i * 120);

但它看起来 like this,它不在屏幕顶部,另一个问题是当我想创建 2 时,它看起来像 like this。所以我尝试使用循环中的 i ,但我无法弄清楚任何事情。这是我的代码:

Brush brush = new SolidColorBrush(Color.FromRgb((byte)_random.Next(1, 255), (byte)_random.Next(1, 255), (byte)_random.Next(1, 255)));
        int howmanyrect = 3;
        Rectangle[] MyRectangle = new Rectangle[howmanyrect];

        if (howmanyrect == 1)
        {
            Rectangle OneRectangle = new Rectangle();

            OneRectangle.Fill = brush;
            OneRectangle.StrokeThickness = 2;
            OneRectangle.Stroke = Brushes.Black;
            OneRectangle.Width = 400;
            OneRectangle.Height = 400;

            Canvas.SetLeft(OneRectangle, Width / 2.0 - OneRectangle.Width / 2.0);
            Canvas.SetTop(OneRectangle, 30);

            myCanvas.Children.Add(OneRectangle);
            Content = myCanvas;
        }

       for (int i = 1; i <= howmanyrect - 1; i++)
        {
            MyRectangle[i] = new Rectangle
            {
                Fill = brush,
                StrokeThickness = 2,
                Stroke = Brushes.Black,
                Width = 400,
                Height = 400 / howmanyrect
            };
            
            Canvas.SetLeft(MyRectangle[i], Width / 2.0 - MyRectangle[i].Width / 2.0);
            Canvas.SetTop(MyRectangle[i], i * 120);

            myCanvas.Children.Add(MyRectangle[i]);
            Content = myCanvas;
        }

【问题讨论】:

  • 是时候看看 Canvas 以外的其他面板了。为了垂直或水平堆叠子元素,您将使用 StackPanel 或(再次)网格。

标签: c# wpf rectangles


【解决方案1】:

我尝试修复您的代码:

      Brush brush = new SolidColorBrush(Color.FromRgb((byte)_random.Next(1, 255), (byte)_random.Next(1, 255), (byte)_random.Next(1, 255)));
        int howmanyrect = 3;
        Rectangle[] MyRectangle = new Rectangle[howmanyrect];

        for (int i = 0; i < howmanyrect; i++)
        {
            var rectangle = new Rectangle
            {
                Fill = brush,
                StrokeThickness = 2,
                Stroke = Brushes.Black,
                Width = 400,
                Height = 400 / howmanyrect
            };
            MyRectangle[i] = rectangle;
        
            Canvas.SetLeft(rectangle, Width / 2.0 - rectangle.Width / 2.0);
            var distance = 10;
            Canvas.SetTop(rectangle, 30 + i * (400 / howmanyrect) + distance );
            myCanvas.Children.Add(rectangle);
        }
        Content = myCanvas;

【讨论】:

  • @preqs 尝试修改距离的值。
  • 我只是通过做 - 10 后高度 = 400 / howmanyrect
猜你喜欢
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多