【问题标题】:WPF Textblock, linebreak in Text attributeWPF Textblock,Text属性中的换行符
【发布时间】:2023-04-06 23:51:01
【问题描述】:

有没有办法让\nTextBlock 中换行?

<TextBlock Text="line1\nLine2" />

或者有没有更好的方法在 Text 属性中强制中间换行?

<LineBreak />

这对我不起作用,它必须是 Text 属性的值,因为文本字符串是从外部来源设置的。

我熟悉LineBreak,但这不是我要寻找的答案。

【问题讨论】:

  • 在 xaml 中你必须使用控制字符 ,如果你想使用 \n 字符,它只适用于后面的代码txtBlock.Text = "line1\nline2";
  • 在 xaml 中工作正常。谢谢 JJ_Coder4Hire!

标签: wpf textblock


【解决方案1】:

试试这个:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

【讨论】:

  • 没有直接尝试过,但我想你可以尝试 xml:space="preserve" 然后直接在 Text 属性中嵌入换行符。
  • 大写很重要。它是
【解决方案2】:

我知道这是在复活一个老问题,但我遇到了同样的问题。我的解决方案是使用 HTML 编码的换行符 (&amp;amp;#10;)。

Line1&amp;#10;Line2

看起来像

第一行
2号线

更多 HTML 编码字符请查看w3schools

【讨论】:

  • @Knasterbax 如果文本被指定为&lt;TextBlock&gt;&lt;/TextBlock&gt; 之间的内容,那么是的,你需要&lt;LineBreak/&gt;&amp;#10;Text 属性内工作:&lt;TextBlock Text="..." /&gt;
  • " "为我工作。我不需要“&”如前所述。当像这样设置文本时,此方法也可以工作:
【解决方案3】:

最简单的方法是

&lt;TextBlock&gt; blabla &lt;LineBreak /&gt; coucou &lt;LineBreak /&gt; coucou 2 &lt;/TextBlock&gt;

所以你只需编写 XAML 代码,&lt;LineBreak /&gt; 与 HTML 中的
或 C# 中的 "\n" 具有完全相同的含义。

【讨论】:

  • 对 Paul Alexander 的回答重复。
【解决方案4】:

【讨论】:

  • 斯科特我不明白你的评论。
  • 问题是 在 Windows XP 上不起作用。它也可能与安装的 .NET 版本有关。除了视觉元素无法正确显示之外,没有任何异常和错误。
【解决方案5】:

如果它位于 Grid 或 StackPanel 等集合中,则它将不起作用。 在这种情况下,如下所示:

【讨论】:

  • 我尝试将此作为 RadioButton 的内容。在我在 Windows 7 上运行程序之前,一切似乎都运行良好。在 Windows 7 上,按钮垂直居中在两行之间。默认情况下,Windows 10 将按钮顶部对齐。虽然 Windows 10 会尊重 VerticalContentAlignment 属性,但 Windows 7 会忽略它。我不得不使用 LineBreak 解决方案。
【解决方案6】:

把一行分成两个标签怎么样?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>

【讨论】:

    【解决方案7】:

    正确的使用方法可能如下:

    <TextBlock>  
        <Span>text1</Span>  
        <LineBreak/>  
        <Span>text2</Span>  
    </TextBlock>
    

    【讨论】:

      【解决方案8】:
        <HyperlinkButton 
              Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />
      

      CRLF简单方式=!&amp;#10;&amp;#13;

      !&amp;#10;&amp;#13; - 适用于所有 wpf、xaml、silverlight 控件,如 TextBlock、HyperlinkText 等

      【讨论】:

      • (去修复你的其他答案并标记它以取消删除)
      【解决方案9】:

      对我来说在同一个文本块中处理多行的最佳方法是:

      <TextBlock>  
          text1  
          <LineBreak/>  
          text2  
      </TextBlock>
      

      确保不要使用 TextWrapping="Wrap"。使用 TextWrapping="NoWrap" 或不使用任何内容。

      【讨论】:

        【解决方案10】:

        如果您正在绑定 TextBlock 的文本,则其他答案均无效。只需将 '\n' 添加到要中断的绑定文本中即可。

        【讨论】:

          【解决方案11】:

          我迟到了,但是.. 这或多或少是我做的,(请注意我的 ItemSources 是纯字符串,没有格式化,我不需要“convertBack”任何东西)

          public class SpaceToLineBreakConverter : IValueConverter
          {   
              public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
              {            
                  return (!String.IsNullOrEmpty(value as string)) 
                  ? new Regex(@"\s").Replace(value as string, "\n") 
                  : value;            
              }
          
              public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
              {
                  throw new NotImplementedException();
              }
          }
          

          【讨论】:

            【解决方案12】:

            这也很好用:

            <TextBlock>
                <Run Text="My nice text"/>
                <LineBreak/>
                <LineBreak/>
                <Run Text="After some linebreaks, I'm back!"/>
            </TextBlock>
            

            【讨论】:

              【解决方案13】:

              当我使用绑定时,这 &amp;amp;#10; 对我不起作用。但这有效:

              $"first line {Environment.NewLine} second line"
              

              【讨论】:

                【解决方案14】:

                只需使用 AccessText 控件。您可以像使用标签一样使用它,并且您拥有 TextWrapping="WrapWithOverflow"

                属性

                例如。

                我的就是这样,而且工作正常。此外,动态更改文本也没有任何问题。

                【讨论】:

                  【解决方案15】:

                  我遇到了类似的问题,想将 xaml 标记的字符串绑定到 TextBlock。本质上将声明性标记存储在 TextBlock 中的字符串中以供以后使用。

                  This is how I did:我对 TextBlock 进行了子类化以使 InlineCollection 可绑定,并在字符串和 InlineCollection(或者实际上是一个通用的内联列表)之间编写了一个转换器。

                  【讨论】:

                    【解决方案16】:

                    这也很好用。

                    使用这种方法,我们可以根据需要修改每一行中的文本属性。

                    <TextBlock>
                        <StackPanel>
                            <TextBlock FontSize="12" FontWeight="Bold" >My Text One</TextBlock>
                            <TextBlock FontFamily="Times New Roman" FontStyle="Italic">
                                - My Text Two
                            </TextBlock>
                        </StackPanel>
                    </TextBlock>
                    

                    【讨论】:

                      猜你喜欢
                      • 2013-01-09
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-08-20
                      相关资源
                      最近更新 更多