0

在 WPF 应用程序中,我有一个文本框。我已经设置AcceptReturntrue 但是当用户单击输入时我需要使文本框更大。我的意思是当前当用户点击回车键时,光标会转到一个新行,但是文本框仍然是相同的高度,上面的行现在被隐藏了。我可以根据内容动态更改 textboxHeight 吗?

谢谢

PS:我不能使用 textarea 我需要留在文本框

4

2 回答 2

1

我建议保持当前大小并使用垂直滚动条。但是,如果您正在做一些真正需要它的事情,请将您的 TextBox 放入一个网格中。将网格行高设置为自动。将文本框的高度设置为自动。将文本框的 VerticalAlignment 设置为 Stretch。在下面的代码中,我保留了滚动条设置。您可以更改您认为合适的设置。

     <Grid>
        <Grid.RowDefinitions>
           <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <TextBox Grid.Row="0" x:Name="scriptTextBox" Margin="10" Height="Auto" Width="Auto" FontFamily="Consolas, Courier New" 
                 HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
                 MaxLines="9999" AcceptsReturn="True" AcceptsTab="True" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" 
                 Text="{Binding Path=Script, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 />
     </Grid>
于 2012-08-07T17:28:46.783 回答
0

你说你需要使用文本框。您至少可以使用覆盖的文本框吗?这在我的测试中效果很好:

public class AutoHeightTextbox : TextBox {

    protected override Size ArrangeOverride(Size arrangeBounds) {
        Size unboundSize = new Size(this.Width, double.PositiveInfinity);
        Size textSize = base.MeasureOverride(unboundSize);
        this.Height = textSize.Height;
        return base.ArrangeOverride(arrangeBounds);
    }

}
于 2012-08-07T17:49:09.510 回答