在 WPF 应用程序中,我有一个文本框。我已经设置AcceptReturn
为true
但是当用户单击输入时我需要使文本框更大。我的意思是当前当用户点击回车键时,光标会转到一个新行,但是文本框仍然是相同的高度,上面的行现在被隐藏了。我可以根据内容动态更改 textboxHeight 吗?
谢谢
PS:我不能使用 textarea 我需要留在文本框
我建议保持当前大小并使用垂直滚动条。但是,如果您正在做一些真正需要它的事情,请将您的 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>
你说你需要使用文本框。您至少可以使用覆盖的文本框吗?这在我的测试中效果很好:
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);
}
}