WPF 文本框的多行

Posted

技术标签:

【中文标题】WPF 文本框的多行【英文标题】:Multiline for WPF TextBox 【发布时间】:2011-02-08 15:49:02 【问题描述】:

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

基本上我正在尝试为 cmets 创建一个 TextBox,但我已经习惯了 WinForms MultiLine=true。我已将MinLines 设置为 3,它正在到达那里,但如果用户能够在此块中的任何位置键入,我最好喜欢它 - 比如按 Enter 并做点点之类的事情。例如:

- Item 1        blah
- Item 2                blahlb lahbvl   d

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

- Item 1         blah - Item 2                      blahb blahb blah

然后,这些 cmets 将帮助填写已发送电子邮件的正文。如果在将此字符串放入电子邮件正文字符串时无法轻松保持相同的格式(这样发送时的格式与键入时的格式相同),那可能毫无意义。

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

【问题讨论】:

【参考方案1】:

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

您可能还希望启用AcceptsTabSpellCheck.IsEnabled

【讨论】:

嘿@itowlson,如果我用你的方法创建多行文本框效果更好但是如果我想用这条线设置文本框文本计数器label1.Content = textBox1.Text.Length; 它的工作但是当我在文本框计数器中按回车时会增加2个字符。我该怎么做这个任务请帮帮我。 发生这种情况是因为换行符是两个字符 (CR/LF)。如果您想将其视为单个字符,请执行textBox1.Text.Replace("\r\n", " ").Length 之类的操作。但请注意:如果这是作为用户反馈,因为您的后端限制了字符数,您可能需要将 CR/LF 计为两个字符,如果后端会这样计算! 我也在这个链接里问这个问题***.com/questions/18459908/… 还要确保 VerticalContentAlignment 设置为 Stretch 同时添加周围的 ScrollVewer 组件以获得滚动条。【参考方案2】:

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

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

更新:

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

【讨论】:

【参考方案3】:

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

【讨论】:

“VerticalAlignment”的默认值“拉伸”refer MSDN。是的,它真的对我有用。这可能取决于您放置文本框的控件,它是非标准的吗? 另一种可能性是,您在该 TextBox 范围内的某处定义的文本框的默认样式为 VerticalAlignment 定义了不同的值。我会和 Snoop 核对一下。 如果容器是固定的,高度自动将不起作用。顶部的每个父容器都必须能够展开。包裹在滚动条中也可以。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

唯一的属性在WPF中对应于

Winforms 属性:TextBox.Multiline = true

WPF 属性:TextBox.AcceptsReturn = true

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

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

【讨论】:

以上是关于WPF 文本框的多行的主要内容,如果未能解决你的问题,请参考以下文章

两个多行文本框的乘积并将其显示到另一个多行文本框

怎样写CSS设置多行文本框的显示行数?

在 wpf 中的自定义样式上,文本框的文本始终为空

自动滚动到由 backgroundworker 更新的多行文本框的底部

如何同步两个多行文本框的滚动?

WPF例2-一个文本框实时显示另一个文本框的内容