【问题标题】:Multiline for WPF TextBoxWPF 文本框的多行
【发布时间】: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 将帮助填写已发送电子邮件的正文。如果在将此字符串放入电子邮件正文字符串时无法轻松保持相同的格式(这样发送时的格式与键入时的格式相同),那可能毫无意义。

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

【问题讨论】:

    标签: wpf textbox multiline


    【解决方案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 计为两个字符,如果后端会这样计算!
    • 我也在这个链接里问这个问题stackoverflow.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 的行为。

        【讨论】:

          猜你喜欢
          • 2023-03-23
          • 1970-01-01
          • 2010-10-27
          • 2018-04-25
          • 2010-11-27
          • 2014-06-23
          • 2016-05-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多