You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF Canvas实现指定数量矩形垂直等分堆叠布局的问题求解

问题原因
  • 循环起始值错误:当前循环从i=1开始,直接跳过了数组下标为0的第一个矩形,当生成2个矩形时实际只创建了1个,自然出现布局错乱
  • 垂直位置计算错误:Canvas.SetTop使用固定值i*120,没有匹配动态变化的矩形高度,规则要求矩形高度是400/矩形总数,固定偏移值必然导致堆叠位置错误
  • 单矩形分支冗余且有偏移:单独写的howmanyrect ==1分支硬编码了SetTop值为30,直接导致整体布局距离顶部有间隙,无法对齐顶部
  • 重复赋值无效操作:每次添加矩形后都重复赋值Content = myCanvas,属于多余操作
修正后的完整代码
Brush brush = new SolidColorBrush(Color.FromRgb((byte)_random.Next(1, 255), (byte)_random.Next(1, 255), (byte)_random.Next(1, 255)));
int howmanyrect = 3; // 可修改为任意需要生成的矩形数量
double singleRectHeight = 400.0 / howmanyrect;

for (int i = 0; i < howmanyrect; i++)
{
    Rectangle rect = new Rectangle
    {
        Fill = brush,
        StrokeThickness = 2,
        Stroke = Brushes.Black,
        Width = 400,
        Height = singleRectHeight
    };
    
    Canvas.SetLeft(rect, Width / 2.0 - rect.Width / 2.0);
    // 垂直位置按当前序号乘以单个矩形高度计算,实现无缝堆叠
    Canvas.SetTop(rect, i * singleRectHeight);

    myCanvas.Children.Add(rect);
}

Content = myCanvas;
修改说明
  • 移除了冗余的单矩形特殊判断,所有数量的矩形都通过统一循环生成,逻辑更简洁
  • 循环起始值改为i=0,覆盖所有矩形索引,不会遗漏第一个矩形
  • 提前计算单个矩形高度,垂直偏移直接用i * 单个高度,保证矩形之间无缝垂直堆叠,完全符合规则要求
  • 移除了顶部的30px硬编码偏移,保证所有矩形整体对齐Canvas顶部
  • 把Content赋值移到循环结束后,避免重复无意义的操作

内容的提问来源于stack exchange,提问作者user17211775

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:57:02