wpf - 允许 TextBox 调整大小,但不会随着用户输入而增长

标签 wpf textbox

我在窗口中定义了一个 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>

问题是当用户在 TextBox 中键入时,它会向右扩展,因为只设置了 MinWidth。我真正想要的是换行到下一行的文本。如果我将列上的 MinWidth 更改为 Width,我可以做到这一点。但是,如果我这样做,则在调整窗口大小时文本框不再调整大小。

有没有办法让我两者兼得? (即仅在窗口调整大小时调整大小,否则换行)

最佳答案

您有此行为的原因是因为您设置了 窗口的 SizeToContent 属性 - 基本上授权窗口根据其内容请求的大小调整自身大小。所以当你输入更多的东西时,文本框说我需要更多的空间,窗口顺从地增长。如果您不设置 SizeToContent 属性,您的文本框将不会增长。

所以我会说失去 SizeToContent 属性 setter 并使用比例网格大小。这里我说使 Column#2 的宽度是 Column#1 的两倍。 Grid 的 Horizo​​ntalAlignment 和 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

关于wpf - 允许 TextBox 调整大小,但不会随着用户输入而增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604952/

相关文章:

c# - 如何检索数据网格中数据绑定(bind)文本框的更改值

c# - 更改集合时 WPF 组合框不更新

.net - 一个 110 kb 的 .NET 4.0 应用程序需要 10 秒的冷启动时间,这是 Not Acceptable !

c# - TranslateTransform 移动元素超出预期

javascript - 从 JavaScript 中的输入文本框获取数组

jquery - 使用 jQuery 隐藏/显示焦点和模糊输入的值文本

c# - 如何为每个客户管理不同的设置?

c# - 从 Source 获取图片 uri

asp.net - 为什么只读文本框在ASP.NET中不返回任何数据?

android - 单击不同的按钮时如何更改按钮文本并使其功能相同?安卓