我在一个窗口中定义了一个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,我可以让它这样做。但是,如果我这样做,那么当调整窗口大小时,TextBox不再调整大小。
有没有办法让我两者兼得?(即仅在调整窗口大小时调整大小,否则换行)
发布于 2009-03-03 06:32:39
之所以会出现这种情况,是因为您已经设置了窗口的SizeToContent属性-它基本上授权窗口根据其内容所请求的大小来调整自身的大小。因此,当你输入更多内容时,文本框显示我需要更多空间,窗口就会顺从地增长。如果不设置SizeToContent属性,textbox将不会增长。
所以我建议去掉SizeToContent属性设置器,使用成比例的网格大小。这里我说的是Column#2的宽度是Column#1的两倍。网格的默认“拉伸”值HorizontalAlignment和VerticalAlignment应该能确保你的控件在调整窗口大小时正确地调整大小。
<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属性设置器添加回上面的代码片段...您会看到一些奇怪的行为,文本框最初会随着文本内容一起增长。但是,如果您调整窗口大小一次..文本框将停止增长。奇怪的是。无法解释这种行为。
HTH
发布于 2017-02-21 22:33:29
WPF的TextBox似乎没有内置该选项。
要解决此问题,您可以使用报告所需(0,0)大小的自定义TextBox。这是一个丑陋的黑客,但它是有效的。
在MainWindow.xaml.cs文件中:
namespace NS
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
...
}
// Ugly HACK because the regular TextBox doesn't allow autoresize to fit the parent but NOT autoresize when the text doesn't fit.
public class TextBoxThatDoesntResizeWithText : TextBox
{
protected override Size MeasureOverride(Size constraint)
{
return new Size(0, 0);
}
}
}然后,在您的MainWindow.xaml文件中:
<Window x:Class="NS.MainWindow"
...
xmlns:local="clr-namespace:NS"
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>
<local:TextBoxThatDoesntResizeWithText Grid.Column="1" Grid.Row="0" TextWrapping="WrapWithOverflow" />
</Grid>
</Window>发布于 2009-03-03 04:48:36
将第二个ColumnDefinition更改为Width="*“。
https://stackoverflow.com/questions/604952
复制相似问题