我在窗口中定义了一个 TextBox,如下所示:
<Window x:Class="NS.MainWindow"
...
SizeToContent="WidthAndHeight">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
<TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
</Grid>
</Window>
问题是当用户在 TextBox 中键入时,它会向右扩展,因为只设置了 MinWidth。我真正想要的是换行到下一行的文本。如果我将列上的 MinWidth 更改为 Width,我可以做到这一点。但是,如果我这样做,则在调整窗口大小时文本框不再调整大小。
有没有办法让我两者兼得? (即仅在窗口调整大小时调整大小,否则换行)
最佳答案
您有此行为的原因是因为您设置了 窗口的 SizeToContent 属性 - 基本上授权窗口根据其内容请求的大小调整自身大小。所以当你输入更多的东西时,文本框说我需要更多的空间,窗口顺从地增长。如果您不设置 SizeToContent 属性,您的文本框将不会增长。
所以我会说失去 SizeToContent 属性 setter 并使用比例网格大小。这里我说使 Column#2 的宽度是 Column#1 的两倍。 Grid 的 HorizontalAlignment 和 VerticalAlignment 的默认“Stretch”值应确保您的控件在调整窗口大小时正确调整大小。
<Window ...
Title="MyWindow" WindowStyle="ToolWindow" ResizeMode="CanResizeWithGrip"
MinWidth="300" Width="300" Height="80">
<Grid x:Name="myGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="100"/>
<ColumnDefinition Width="2*" MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition MinHeight="50" />
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">Description:</TextBlock>
<TextBox Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow"/>
</Grid>
如果你只是将 SizeToContent 属性 setter 添加回上面的代码片段......你会看到一些奇怪的行为,文本框最初随着文本内容而增长......但是如果你调整窗口大小一次......文本框将停止增长。奇怪……无法解释这种行为。
HTH
关于wpf - 允许 TextBox 调整大小,但不会随着用户输入而增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604952/