【发布时间】:2020-03-25 03:55:40
【问题描述】:
当我将文本框放在如下网格列中时
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" MinWidth="115"/>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="90"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="hello"/>
<TextBox Grid.Column="1" />
<Button Grid.Column="2" Content="push me"/>
</Grid>
</StackPanel>
我得到了正确的结果,即文本框宽度是从父网格获得的
但是当我输入长文本时,文本框开始超出其列,并且在几个额外的字母后停止延伸
到 .Net 4.6.2,我得到相同的结果,但更改为 .Net 4.7.2 问题得到解决,即文本框宽度没有改变。 我的软件是.Net 4.0编译的,有没有解决低于4.7.2的.net的解决方案?
尝试了 Pavel 的第一个想法:删除 stackpanel 并在其中添加另一个网格行,但在 .net 4.6.2 中仍然无法正常工作
尝试了 Pavel 的第二个想法:将第一列的宽度设为“Auto”而不是“1*”。这行得通,文本框没有扩展(.net 4.6.2),但是我真的希望第一列和第二列能够响应调整大小。
【问题讨论】:
-
StackPanel 有什么用?删除它,它应该可以按预期工作
-
@NawedNabiZada 我删除了堆栈面板,问题存在。顺便说一句,StackPanel 就在那里,所以我可以将许多这样的输入字段放在一起,否则一个网格会填满整个窗口。
-
您可以将 RowDefinition 添加到您的 Grid 中,将 TextBox 的 HorizontalAlignment 设置为 Stretch。 StackPanel 仅填充必要的空间,在您的情况下,它填充 TextBox 所需的空间并在您向 TextBox 添加文本时扩展 Grid
-
@Sorush 您可以将网格行高设置为自动以适应其内容,看看我的回答
-
我修改了尺寸。