WPF文本框的多行


364

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

基本上,我试图TextBox发表评论,但是我已经习惯了WinForms MultiLine=true。我已经设置MinLines为3,到那里了,但是如果用户能够在此块中的任何地方键入内容,则最好设置它-例如按Enter键并执行点点操作。例如:

- Item 1        blah
- Item 2                blahlb lahbvl   d

但是此刻所有文本都停留在一行上。

- Item 1         blah - Item 2                      blahb blahb blah

这些评论将有助于填充所发送电子邮件的正文。将字符串放入电子邮件正文字符串时,如果我不能轻易保持相同的格式(可能看起来像发送时的样子,就像键入时一样),这可能毫无意义。

我能实现我想要的,还是必须将所有文本都留在一行上?

Answers:


757

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

您也可能希望启用AcceptsTabSpellCheck.IsEnabled


1
嘿@itowlson,如果我用您的方法创建多行文本框,它的工作效果更好,但是如果我想label1.Content = textBox1.Text.Length;用此行设置文本框文本计数器,则它的工作是有效的,但是当我在文本框计数器中按Enter键时,它将增加2个字符。我该怎么做,请帮帮我。
杰伊·舒克拉

2
发生这种情况是因为换行符是两个字符(CR / LF)。如果要将其视为单个字符,请执行textBox1.Text.Replace("\r\n", " ").Length。但是请注意:如果这是作为用户反馈,因为您的后端限制了字符数,那么如果后端要对CR / LF进行计数,则可能需要将CR / LF视为两个字符!
itowlson


1
还要确保将VerticalContentAlignment设置为Stretch
eran otzap 2014年

1
还要添加周围的ScrollVewer组件以具有滚动条。
Borko Djurovic

34

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

要拉伸文本框,请设置Height="Auto"

更新:

回想起来,由于TextBoxes的默认样式指定了App资源中某个应用程序的某个标准高度,因此我认为这一定是必要的。如果这对您有所帮助,可能值得检查一下。


19

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

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

12

与@Andre Luus相反,设置Height="Auto"不会使TextBox拉伸。我发现的解决方案是设置VerticalAlignment="Stretch"


1
对于“VerticalAlignment”的默认值 “延伸” 是指MSDN。是的,它确实对我有用。这可能取决于放置文本框的控件,这是否是非标准的?
Andre Luus

1
另一个可能性是,您为该TextBox范围内某处定义的Textbox具有默认样式,该样式为VerticalAlignment定义了不同的值。我会向史努比查询。
Andre Luus

1
如果容器是固定的,则自动高度调节器将不起作用。顶部的每个父容器都必须能够扩展。包装滚动条也可以。
Lee Louviere 2014年

5

唯一属性对应于WPF的

Winforms属性:TextBox.Multiline = true

WPF属性:TextBox.AcceptsReturn = true

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.