如何在Silverlight文本框中表示换行或新行

21

我正在努力匹配Silverlight中的特殊字符集。我只知道以下内容:

要在Silverlight TextBlock中表示LineBreak:

使用:> lineBreak <

但是,我该如何在Silverlight TextBox中表示换行或LineBreak?

例如:我希望这一行变成两行:

This is line one. This is line two.

似乎这个\r\n不起作用。这是第一行\r\n

7个回答

48

底线在顶部

<TextBox Text="This is line one!&#13;This is line two!" />

在 Silverlight TextBox 中的换行问题

如果你想要在 Xaml 中像初始化 TextBlock 一样使用字面文本来初始化一个 TextBox,那么你需要一种可靠的方式来代表 Silverlight 在 Xaml 中使用的换行符。

Silverlight 使用 CR 字符(0x0D - ASCII 13)来表示换行,你可以在 C# 的字符串文本中使用 \r 来包含它。但是 Xaml 不是 C#,所以不能在 Xaml 中使用 \r。

Xaml 本质上是 XML,但有一些奇怪的 Xaml 解析规则。直接在 Xaml 中包含换行符不会在运行时起作用(尽管设计器会按预期显示)。你可能会认为这是因为 Xml 使用 LF 字符(0x0A)作为其换行符。但是在代码中,你可以将包含“\r”或“\n”的字符串分配给 Text 属性,TextBox 将显示一个新行。实际上,你可以分配序列“\r\n”,它将显示单个新行(而不是两个新行)。

最终,你可以使用 Xml 字符代码实体来在 Xaml 中代表 \r "&#13;",这个实体可以在 Xaml 解析过程中正常工作,我无法解释其中的原因。


+1 是因为“尽管设计师按预期显示了它”。这让我意识到,设计师可能不会使用 &#13; 显示“换行符”,但在运行时,文本块会显示。 - Shishir Gupta
在WP8.1中也能很好地工作! - 0xC0DED00D

18
在XAML中,你可以简单地使用LineBreak:
<TextBlock Name="textBlock1" >line 1 <LineBreak /> line 2</TextBlock>

1
海报正在询问关于 TextBox,而不是 TextBlock。 - RobSiklos
1
标题是关于“TextBox”的,但如果你看他的帖子:“……在Silverlight TextBlock中表示LineBreak:……” - danbord
1
@danbord:我认为你需要更仔细地阅读问题。 - AnthonyWJones
确实,这不是针对TextBox的,就像作者所请求的那样,但这对我解决TextBlock换行需求非常有帮助。 :-) - Rob.Kachmar

10

要在XAML中将一个换行添加到TextBoxText属性中,可以使用ASCII字符代码来表示换行符,如下例所示:

<TextBox x:Name="_test" Height="150" Text="This is line one.
This is line two." />

要在代码后端添加一个文本框的Text属性中的换行符,可以使用Environment.NewLine静态值(与\r\n相同),如以下代码示例所示:

this._test.Text = string.Format(
    "This is line one.{0}This is line two.",
    Environment.NewLine);

2

如果你想展示一个带有回车符的字符串,只需使用带有回车符的字符串:

MyTextBlock.Text = @"line 1
line2";

这种方法的问题在于,它包含了序列\r\n来表示新行。这与TextBox所使用的仅为\r的新行不一致,因此以后会造成麻烦。例如,将所有\r替换为\n以使用其中的结果,其中\n是换行符,将导致某些换行符被加倍(包括在初始内容中的那些)。 - AnthonyWJones

2

谢谢大家。

它正在工作。 对于Silverlight的TextBlock:在textBlockXAML中使用<lineBreak/>

感谢AnthonyWJones 对于Silverlight的textBox,我在用于在TextBox中显示的字符串中使用"\r"


1

在 Windows Phone Silverlight TextBlock 中换行,请使用:

"这是第一行!" & vbCrLf & "这是第二行!"


0
<TextBox x:Name="textBox" AcceptsReturn="True" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接