我正在开发一个应用程序来发送一些反馈。
基本上我正在尝试为评论创建一个 TextBox
,但我已经习惯了 WinForms MultiLine=true
。我已将 MinLines
设置为 3,这已经到了那里,但如果用户能够在此块中的任何位置键入,我最好喜欢它 - 比如按 Enter 并做点点之类的事情。例如:
- Item 1 blah
- Item 2 blahlb lahbvl d
但目前文本都停留在一行上。
- Item 1 blah - Item 2 blahb blahb blah
然后,这些评论将有助于填写发送的电子邮件的正文。如果在将此字符串放入电子邮件正文字符串时无法轻松保持相同的格式(这样发送时的格式与键入时的格式相同),那可能毫无意义。
我可以实现我所追求的还是必须将其作为所有文本保留在一行上?
在您的 TextBox 上启用 TextWrapping="Wrap"
和 AcceptsReturn="True"
。
您可能还希望启用 AcceptsTab
和 SpellCheck.IsEnabled
。
此外,如果像我一样,您直接在 XAML 中添加控件(不使用编辑器),您可能会感到沮丧,因为即使设置了这两个属性,它也不会拉伸到可用高度。
要使 TextBox 拉伸,请设置 Height="Auto"
。
更新:
回想起来,我认为这一定是必要的,这要归功于 TextBoxes 的默认样式,它在 App 资源中的某处为应用程序指定了某个标准的高度。如果这对您有帮助,可能值得检查一下。
下面是一个示例 XAML
,它允许 TextBox
接受多行文本并使用自己的滚动条:
<TextBox
Height="200"
Width="500"
TextWrapping="Wrap"
AcceptsReturn="True"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"/>
WPF 中唯一对应的属性
Winforms 属性:TextBox.Multiline = true
是 WPF 属性:TextBox.AcceptsReturn = true
。
<TextBox AcceptsReturn="True" ...... />
所有其他设置,例如 VerticalAlignement
、 WordWrap
等,仅控制 TextBox 在 UI 中的交互方式,但不影响 Multiline
行为。
与 @Andre Luus, setting 相反,Height="Auto"
不会使 TextBox
伸展。我找到的解决方案是设置 VerticalAlignment="Stretch"
label1.Content = textBox1.Text.Length;
,它的工作但是当我在文本框计数器中按回车时会增加 2 个字符。我该如何完成这项任务,请帮助我。textBox1.Text.Replace("\r\n", " ").Length
之类的操作。不过要小心:如果这是因为您的后端限制了字符数而作为用户反馈,那么您可能需要将 CR/LF 计为两个字符,如果后端会这样计算的话!