WPF TextBox的多行文本输入

409

我正在开发一个用于发送反馈的应用程序。

基本上,我正在尝试为评论制作一个 TextBox,但我习惯了 WinForms 的 MultiLine=true。我已将 MinLines 设置为 3,接近目标,但最好是用户能够在此块中的任何位置输入 - 就像按回车键并进行点号排序之类的操作。例如:

- Item 1        blah
- Item 2                blahlb lahbvl   d

但目前文本都在同一行上。

- Item 1         blah - Item 2                      blahb blahb blah

这些注释将填充发送的电子邮件正文。如果我无法轻松地保持相同的格式,将该字符串放入电子邮件正文字符串中可能是毫无意义的(以便在发送时它看起来与输入时相同)。

我能否实现我想要的效果,还是必须将其保留为一行中的所有文本?

5个回答

837

在您的文本框上启用TextWrapping="Wrap"AcceptsReturn="True"

您也可以考虑启用AcceptsTabSpellCheck.IsEnabled


1
嘿@itowlson,如果我使用你的方法创建多行文本框,它会更好地工作,但是如果我想要设置文本框文本计数器label1.Content = textBox1.Text.Length;,虽然这个方法可以工作,但是当我在文本框中按下回车键时,计数器会增加2个字符。请问我该如何解决这个问题,请帮帮我。 - Jay Shukla
2
这是因为换行符是两个字符(CR/LF)。如果你想将它视为单个字符,可以尝试像这样做:textBox1.Text.Replace("\r\n", " ").Length。但要小心:如果这是作为用户反馈的,因为你的后端限制了字符数,那么如果后端也将其视为两个字符,则你可能需要将CR/LF计为两个字符! - itowlson
我也在这个链接中提出了这个问题:https://dev59.com/QHbZa4cB1Zd3GeqPCSXY - Jay Shukla
1
还要确保VerticalContentAlignment属性被设置为Stretch。 - eran otzap
1
同时添加一个ScrollView组件以便拥有滚动条。 - Borko Djurovic

36

此外,如果像我一样,您直接在XAML中添加控件(而不使用编辑器),您可能会感到沮丧,即使设置了这两个属性,Height="Auto" ,它也无法拉伸到可用高度。

为了使TextBox能够拉伸,请将Height="Auto"

更新:

回顾一下,我认为这一定是由于默认的TextBox样式在应用程序的某个地方指定了高度标准,因此必须采取此措施。如果这对您有所帮助,检查一下App资源中的内容可能会很有价值。


34

这是一个示例XAML,它允许TextBox接受多行文本,并使用其自己的滚动条:

以下是可允许TextBox接受多行文本并使用其自己的滚动条的XAML示例:

<TextBox
Height="200"
Width="500"
TextWrapping="Wrap"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"/>

14

仅有的一个TextBox.Multiline = true在WinForms中对应的WPF属性是WPF属性:

TextBox.AcceptsReturn = true 

或者

<TextBox AcceptsReturn="True" ...... />

所有其他设置,例如 VerticalAlignement WordWrap 等,仅控制文本框在 UI 中的交互,但不影响 Multiline 行为。


12
@Andre Luus, setting相反,Height="Auto"不会使TextBox拉伸。我找到的解决方法是设置VerticalAlignment="Stretch"

1
“VerticalAlignment”的默认值是“Stretch”参见MSDN。是的,它确实对我起作用了。不过这可能取决于您放置文本框的控件是否非标准? - Andre Luus
1
另一个可能性是,在定义该 TextBox 的范围内,您为文本框定义了默认样式,并为 VerticalAlignment 定义了不同的值。建议使用 Snoop 进行检查。 - Andre Luus
1
如果容器是固定的,高度自动将无法工作。每个父容器到顶部必须能够扩展。在滚动条中包装也可以起作用。 - Lee Louviere

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接