如何防止文本框的宽度在容器外部生长?

时间:2015-08-21 17:52:02

标签: c# wpf

我希望允许文本框的大小增加,直到它填满其容器。如果在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>

1 个答案:

答案 0 :(得分:3)

将第二列定义的宽度设置为“*”应该为您提供所需的功能。

此外,在文本框中设置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>