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
相关产品推荐
相关产品推荐

