允许文本框被调整,但没有对用户输入的成长
我有一个窗口内定义,像这样一个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>
的问题是,当在文本框的用户类型也扩展到由于权利只有MinWidth被设置。我真正想要的是将文本换行到下一行。如果我将列上的MinWidth更改为Width,我可以得到它。但是,如果我这样做,那么当窗口调整大小时,TextBox不再调整大小。
我有两种方法吗? (即仅调整窗口大小,否则换行)
你有这种行为的原因是因为你已经设置了窗口的SizeToContent属性 - 它基本上授权窗口根据其内容请求的大小自己调整大小。所以当你输入更多的东西时,文本框说我需要更多空间,窗口乖乖地增长。如果不设置SizeToContent属性,则文本框不会增长。
所以我会说失去SizeToContent属性设置器&使用比例网格大小。在这里我说第2列的宽度是第1列的两倍。网格的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
将第二个ColumnDefinition更改为Width =“*”。
WPF的TextBox似乎没有内置的选项。
要解决此问题,可以使用报告所需(0,0)大小的自定义文本框。这是一个丑陋的黑客,但它的工作。
在你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>
这仍然会增长到文本框中。使用*意味着 - 使用第二列的剩余可用宽度 – Gishu 2009-03-03 05:54:29