如何防止文本框的宽度超出其容器的范围?

本文关键字:范围 文本 何防止 | 更新日期: 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>