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

WPF中Rectangle添加至Grid后不显示且无法自适应宽度问题

问题分析与解决

问题原因

你遇到的问题核心在于**HorizontalAlignment.Center和自动宽度(double.NaN)的组合逻辑**:

  • 当控件设置Width = double.NaN时,WPF会尝试根据控件自身的内容计算宽度。但Rectangle是无内容的形状控件,没有可计算的内容尺寸,所以最终宽度会被判定为0,导致控件完全不可见。
  • 当你设置具体Width值时,控件有了明确的宽度基准,HorizontalAlignment.Center会让它在Grid单元格内居中显示,因此能正常看到。

解决方案

要让Rectangle自适应Grid的宽度,只需将HorizontalAlignment改为HorizontalAlignment.Stretch——这个值会让控件自动拉伸,填满所在Grid单元格的全部可用宽度。另外,Width = double.NaN是Rectangle的默认宽度设置,完全可以省略。

修正后的代码:

var rectangle = new Rectangle()
{
    Height = 32,
    HorizontalAlignment = HorizontalAlignment.Stretch,
    VerticalAlignment = VerticalAlignment.Top,
    Fill = Brushes.WhiteSmoke
};

如果你的需求是让Rectangle保持居中,但宽度随Grid宽度按比例自适应,那可以给Grid添加列定义并设置Width="*",同时让Rectangle的HorizontalAlignment保持Center,再将其Width绑定到Grid(或对应列)的ActualWidth属性,不过这种场景下用Stretch通常更直接高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:50:44