WPF代码中的自动高度


101

如何Height在C#代码中将WPF控件的属性值设置为“ Auto”?

<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
    <RowDefinition Height="Auto" />
    <RowDefinition />
</Grid.RowDefinitions>

我想在后面的代码中重现此行为。有任何想法吗?

Answers:


144

也许此链接会为您提供帮助。

有时,您可能需要以编程方式将WPF元素的高度或宽度设置为“自动”。为此,只需使用Double.NaN(非数字)值。

例如,在C#中:

this.txtName.Width = Double.NaN;


1
就我而言,不要工作。但是我正在通过行为来改变高度宽度(expression blend 4.0 lib)
Franck

1
链接已
消失,

2
Nimrod的答案更加明确和易于理解。
戴维(David)

获取“ NaN”不是属性“ MaxWidth”的有效值
Damitha

我觉得Nimrod的答案是最干净的,现在应该是公认的答案(不确定GridLength.Auto过去是否可能)。还有GridLength.Star填充剩余的区域。
Wolfgang Schreurs

111

您可以使用

RowDefinition rd =新的RowDefinition();  
rd.Height = GridLength.Auto;  
ContentGrid.RowDefinitions.Add(rd);

8
此答案与接受的答案有什么区别?因为如果没有,这应该是不规避框架的最佳答案。
estebro

3
根据反射器,GridLength.Auto是新的GridLength(1.0,GridUnitType.Auto); 因此并不完全等同于可接受的答案,而是更具可读性。
helios456

这不是公认的答案。并非所有控件都将Height属性实现为“ GridLength”对象(结构)。对于只使用两次的人,此答案不起作用。问题并没有问得一般,它仅以网格为例。
UuDdLrLrSs
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.