2011-01-25 43 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" />