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

Mr.*_*ith 6 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>
Run Code Online (Sandbox Code Playgroud)

Mic*_*l G 4

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

此外,MinWidth在文本框上设置 ,并设置HorizontalAlignmentto 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>
Run Code Online (Sandbox Code Playgroud)