WPF TextBox的多行

bar*_*ron 351 wpf textbox multiline

我正在开发一个应用程序来发送一些反馈.

基本上我是想做一个TextBox评论,但我已经习惯了WinForms MultiLine=true.我已经设置MinLines为3,它已经到了那里,但最好是我喜欢它,如果用户能够在这个块中的任何地方输入 - 比如按回车并做点点数的事情.例如:

- Item 1        blah
- Item 2                blahlb lahbvl   d
Run Code Online (Sandbox Code Playgroud)

但目前文本都停留在一行.

- Item 1         blah - Item 2                      blahb blahb blah
Run Code Online (Sandbox Code Playgroud)

这些评论将有助于填写发送的电子邮件的正文.如果在将此字符串放入电子邮件正文字符串时无法轻松保持相同的格式设置(这样看起来就像在键入时一样发送它),这可能毫无意义.

我可以实现我所追求的目标,还是必须将其作为一行中的所有文本保留?

ito*_*son 734

启用TextWrapping="Wrap"AcceptsReturn="True"在您的TextBox上.

您可能也希望启用AcceptsTabSpellCheck.IsEnabled.

  • 发生这种情况是因为换行符是两个字符(CR/LF).如果你想把它当作单个字符,可以做一些像`textBox1.Text.Replace("\ r \n","").Length`这样的事情.但请注意:如果这是因为您的后端限制了字符数的用户反馈,那么您可能需要将CR/LF计算为两个字符,如果后端将如何计算它! (2认同)

And*_*uus 34

此外,如果像我一样,您直接在XAML中添加控件(不使用编辑器),即使设置了这两个属性,您也可能会感到沮丧的是它不会伸展到可用高度.

要使TextBox伸展,请设置Height="Auto".

更新:

回想起来,我认为这一定是必要的,这要归功于TextBoxes的默认样式,指定应用程序资源中某处应用程序的某些标准高度.如果这有助于您,可能值得检查一下.


小智 16

以下是XAML允许TextBox接受多行文本的示例,它使用自己的Scrollbars:

<TextBox
Height="200"
Width="500"
TextWrapping="Wrap"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"/>
Run Code Online (Sandbox Code Playgroud)


Elk*_*vis 11

与@Andre Luus相反,设置Height="Auto"不会TextBox延伸.我找到的解决方案是设置VerticalAlignment="Stretch"


mar*_*gle 10

唯一属性对应于WPF的

Winforms属性:TextBox.Multiline = true

WPF属性:TextBox.AcceptsReturn = true

<TextBox AcceptsReturn="True" ...... />
Run Code Online (Sandbox Code Playgroud)

所有其他设置,如VerticalAlignement WordWrap等,只能控制如何在UI的文本框相互作用,但不影响Multiline行为。