如何防止文本框的宽度超出其容器的范围?
本文关键字:范围 文本 何防止 | 更新日期: 2023-09-27 18:09:13
我想允许一个文本框的大小增长,直到它填满它的容器。如果在WPF窗口中放置一个空白文本框,它的大小将会增加(当用户在其中输入文本时),直到它填满整个容器,此时它的大小将停止扩展。
但是,如果我将该文本框放在一个网格中,该文本框将永远不会停止增长。更奇怪的是,如果我在网格的列上硬编码一些固定的宽度,文本框甚至还会继续增长。
我希望文本框能够增长,网格也能够增长,但是一旦网格不能再增长,我希望文本框也停止增长。这能做到吗?
这里有一个快速的示例。当您在文本框中输入时,它的大小将按预期增长。但是,即使在WPF表单的网格完全填充之后,文本框仍将继续增长。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Name="window">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="StackOverflow"/>
<TextBox Grid.Column="1"/>
</Grid>
</Window>
将第二列定义的宽度设置为"*"应该可以提供所需的功能。
另外,在文本框上设置MinWidth
,并将HorizontalAlignment
设置为Left
,这样它就不会拉伸到列的宽度。如果您想让它拉伸,然后删除此属性。
在这个例子中,我添加了一个宽度为50的额外列,以突出显示文本框一旦达到列宽度边界就会停止增长。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="StackOverflow" />
<TextBox Grid.Column="1"
HorizontalAlignment="Left"
MinWidth="50" />
</Grid>