2011-01-25 46 views
21

我很难匹配在Silverlight中设置的特殊字符。我只在以下方面:如何在silverlight文本框中表示换行符或换行符框

要在Silverlight TextBlock中表示断行:

使用:>换行符<

但我应该使用什么来表示一个新行或换行符在Silverlight文本框?

例如:我想要这一行mag:这是第一行。这是第二行

分成这样:

这是第一行。 这是第二行。

看来这\ r \ n不起作用。这是一条线\ r \ n

回答

48

在顶部

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

换行符怪诞的Silverlight的文本框

如果您要用类似于TextBlock的方式初始化XAML中的文本文本的TextBox内容,那么您需要一种可靠的方式来表示Silverlight在Xaml中使用的换行符。

Silveright使用一个CR字符(0x0D - ASCII 13)来表示一个换行符,它在C#中包含在字符串中作为\ r。然而,Xaml不是C#,所以你不能在Xaml中使用\ r。

Xaml是有趣的XML,但有一些Xaml解析奇怪。就像Derek在他的回答中一样,直接在Xaml中包含一个换行符在运行时不起作用(尽管设计师按预期显示它)。您可能会认为这是因为Xml使用LF字符(0x0A)作为其换行符。但是在代码中,您可以为Text属性指定一个包含“\ r”或“\ n”的字符串,并且TextBox将显示一个新行。实际上,您可以指定序列“\ r \ n”,它会显示一个新行(不是两个新行)。

最终,您可以使用Xml字符代码实体来表示Xaml "&#13;"中的\ r,它保留了Xaml解析过程中的原因,我实际上无法解释它。

2

如果你想显示在它回车字符串,只需使用一个字符串中有一个回车:

MyTextBlock.Text = @"line 1 
line2"; 
+0

这种方法的问题是它包含序列\ r \ n来表示一个新行。这与TextBox对新行的简单使用\ r不一致,因此稍后会产生麻烦。例如,将所有\ r简单替换为\ n以在\ n为换行符时使用结果会导致一些换行符加倍(包含在初始内容中的换行符)。 – AnthonyWJones 2011-01-25 15:11:15

10

要断行添加到在XAML一个TextBoxText属性,使用ASCII字符代码为换行作为显示在下面的例子:

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

要换行符添加到代码隐藏一个TextBoxText属性,使用Environment.NewLine静态值(其是相同的\r\n)如下面的代码示例所示:

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

最干净的解决方案! – 2012-03-08 23:27:28

18

在XAML可以简单地使用断行:

<TextBlock Name="textBlock1" >line 1 <LineBreak /> line 2</TextBlock> 
+1

海报提问有关TextBox,而不是TextBlock。 – RobSiklos 2011-01-25 13:53:38

+1

标题是关于“文本框”的,但是如果你看他的帖子:“...要在Silverlight TextBlock中表示一个LineBreak:...” – danbord 2011-01-25 14:09:21

+1

@danbord:我认为你需要更仔细地阅读这个问题。 – AnthonyWJones 2011-01-25 14:32:45

2

谢谢大家。

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

谢谢到AnthonyWJones 为Silverlight textBox,我使用“\ R”其用于在TextBox显示的字符串中。

1

对于一款Windows Phone的Silverlight的TextBlock使用换行符: “这是一个行”

& vbCrLf &“这是第二行!”

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