代码中的 WPF 自动高度
Posted
技术标签:
【中文标题】代码中的 WPF 自动高度【英文标题】:WPF Auto height in code 【发布时间】:2011-01-28 09:09:22 【问题描述】:如何在 C# 代码中将 WPF 控件的 Height
属性的值设置为“Auto
”?
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
我想在后面的代码中重现这种行为。有什么想法吗?
【问题讨论】:
【参考方案1】:也许this link 会帮助你。
有时,您可能想要 以编程方式设置高度或 自动输入的 WPF 元素的宽度 代码。为此,只需使用 Double.NaN(非数字)值。
例如,在 C# 中:
this.txtName.Width = Double.NaN;
【讨论】:
不要在我的情况下工作。但我正在通过行为改变高度宽度(表达式混合 4.0 lib) 链接已失效,但您可以访问存档版本here Nimrod 的回答更加明确和容易理解。 获取“NaN”不是属性“MaxWidth”的有效值 我觉得 Nimrod 的答案是最干净的,现在应该是公认的答案(过去不确定GridLength.Auto
是可能的)。还有GridLength.Star
来填充剩余区域。【参考方案2】:
你可以使用
RowDefinition rd = new RowDefinition(); rd.Height = GridLength.Auto; ContentGrid.RowDefinitions.Add(rd);【讨论】:
这个答案和接受的答案有什么不同吗?因为如果不是,这应该是不绕过框架的最佳答案。 根据反射器,GridLength.Auto是new GridLength(1.0, GridUnitType.Auto);因此不完全等同于接受的答案,但更具可读性。 这不像公认的答案那样普遍。并非所有控件都将 Height 属性实现为“GridLength”对象(结构)。对于那些只使用 double 这个答案的人来说是行不通的。而且这个问题也不是泛泛而谈,只是以网格为例。【参考方案3】:虽然已通过代码隐藏(如所询问)回答了该问题,但对于没有 "auto"
的基本控件属性,这是 XAML 中的相同解决方案:
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Height="x:Static sys:Double.NaN"
发布是因为谷歌在搜索 TextBox
的 XAML 解决方案时将我带到了这里(自动不存在)。
【讨论】:
以上是关于代码中的 WPF 自动高度的主要内容,如果未能解决你的问题,请参考以下文章