303

属性として設定されているときにテキストに改行を追加するにはどうすればよいですか:

<TextBlock Text="Stuff on line1 \n Stuff on line2" />

分解された形式に分割することは、私の特定の状況ではオプションではありません。私が必要としているのは、以下をエミュレートする方法です。

<TextBlock>
  <TextBlock.Text>
    Stuff on line1 <LineBreak/>
    Stuff on line2
  </TextBlock.Text>
<TextBlock/>
4

13 に答える 13

597
<TextBlock Text="Stuff on line1&#x0a;Stuff on line 2"/>

16進数でエンコードされた値を使用して、リテラルを表すことができます。この場合、ラインフィード(char 10)を使用しました。「クラシック」をやりたい場合はvbCrLf&#x0d;&#x0a;

ちなみに、構文に注意してください。これは、アンパサンド、ポンド、文字x、次に必要な文字の16進値、最後にセミコロンです。

また、完全を期すために、コードビハインドの定数や実行時に作成される変数のように、すでに改行が埋め込まれているテキストにバインドできます。

于 2008-10-08T15:39:42.500 に答える
73

ソース XAML で空白を保持するために、属性 xml:space="preserve" を使用できる場合があります。

<TextBlock xml:space="preserve">
Stuff on line 1
Stuff on line 2
</TextBlock>
于 2010-10-20T12:21:08.437 に答える
61

文字列で実行する必要がある場合 (例: リソース内)、アンパサンド文字コードを使用する必要がありxml:space="preserve" ます

<System:String x:Key="TwoLiner" xml:space="preserve">First line&#10;Second line</System:String>

または、テキスト内のリテラル改行:

<System:String x:Key="TwoLiner" xml:space="preserve">First line 
Second line</System:String>

警告: 2 番目の例のようなコードを記述すると、オペレーティング システムやテキスト エディターが使用する行末に応じて、改行または改行と改行が挿入されます。たとえば、それを書いてLinuxシステムからgitにコミットすると、すべて問題ないように見えるかもしれませんが、誰かがそれをWindowsにクローンすると、gitは行末を\r\n文字列の目的に応じて...あなたに変換します世界を壊すかもしれない。

空白を保持するときは、そのことに注意してください。次のようなものを書く場合:

<System:String x:Key="TwoLiner" xml:space="preserve">
First line 
Second line 
</System:String>

実際には、4 つの改行、おそらく 4 つのキャリッジ リターン、および目に見えない末尾の空白を追加した可能性があります...

于 2010-11-02T19:01:32.697 に答える
21

次のように、コンテンツを削除<TextBlock.Text>して追加するだけです。

    <Grid Margin="20">
        <TextBlock TextWrapping="Wrap" TextAlignment="Justify" FontSize="17">
        <Bold FontFamily="Segoe UI Light" FontSize="70">I.R. Iran</Bold><LineBreak/>
        <Span FontSize="35">I</Span>ran or Persia, officially the <Italic>Islamic Republic of Iran</Italic>, 
        is a country in Western Asia. The country is bordered on the 
        north by Armenia, Azerbaijan and Turkmenistan, with Kazakhstan and Russia 
        to the north across the Caspian Sea.<LineBreak/>
        <Span FontSize="10">For more information about Iran see <Hyperlink NavigateUri="http://en.WikiPedia.org/wiki/Iran">WikiPedia</Hyperlink></Span>
            <LineBreak/>
            <LineBreak/>
            <Span FontSize="12">
                <Span>Is this page helpful?</Span>
                <Button Content="No"/>
                <Button Content="Yes"/>
            </Span>
    </TextBlock>
    </Grid>

ここに画像の説明を入力

于 2013-07-20T11:34:50.760 に答える
16

これを行うには、 Text 属性で行う必要があることに注意してください。次のようなコンテンツは使用できません

<TextBlock>Stuff on line1&#x0a;Stuff on line 2</TextBlock>
于 2009-02-12T14:54:12.090 に答える
13

多分誰かが好む

<TextBlock Text="{Binding StringFormat='Stuff on line1{0}Stuff on line2{0}Stuff on line3',
                          Source={x:Static s:Environment.NewLine}}" />

xmlns:s="clr-namespace:System;assembly=mscorlib"

于 2012-09-06T12:55:25.460 に答える
11

この質問に対するすべての回答を試して、なぜどれもうまくいかないのか頭を悩ませている人は、私が遭遇した問題の形に遭遇した可能性があります.

私のTextBlock.TextプロパティはToolTipService.ToolTip要素の中にあり、データが SQL ストアド プロシージャから取り出されているオブジェクトのプロパティにデータバインドされていました。現在、ストアド プロシージャ内のこの特定のプロパティからのデータは、SQL 関数から取得されていました。

何もうまくいかなかったので、検索をあきらめて、以下のコンバーター クラスを作成しました。

public class NewLineConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var s = string.Empty;

        if (value.IsNotNull())
        {
            s = value.ToString();

            if (s.Contains("\\r\\n"))
                s = s.Replace("\\r\\n", Environment.NewLine);

            if (s.Contains("\\n"))
                s = s.Replace("\\n", Environment.NewLine);

            if (s.Contains("&#x0a;&#x0d;"))
                s = s.Replace("&#x0a;&#x0d;", Environment.NewLine);

            if (s.Contains("&#x0a;"))
                s = s.Replace("&#x0a;", Environment.NewLine);

            if (s.Contains("&#x0d;"))
                s = s.Replace("&#x0d;", Environment.NewLine);

            if (s.Contains("&#10;&#13;"))
                s = s.Replace("&#10;&#13;", Environment.NewLine);

            if (s.Contains("&#10;"))
                s = s.Replace("&#10;", Environment.NewLine);

            if (s.Contains("&#13;"))
                s = s.Replace("&#13;", Environment.NewLine);

            if (s.Contains("<br />"))
                s = s.Replace("<br />", Environment.NewLine);

            if (s.Contains("<LineBreak />"))
                s = s.Replace("<LineBreak />", Environment.NewLine);
        }

        return s;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

@dparker's answerEnivornment.NewLineの方法を使用する必要がありました。改行の可能なテキスト表現を探して、それを に置き換えるようにコンバーターに指示しました。Environment.NewLine

これはうまくいきました!

しかし、なぜ他の方法ではデータバインドされたプロパティを処理できないのか、私は依然として困惑していました。

@BobKingの受け入れられた回答にコメントを残しました:

@BobKing - SQL sproc から改行が埋め込まれたフィールドにバインドする場合、これは ToolTipService.ToolTip で機能しないようです。

彼は次のように答えました。

@CodeMaverick新しい行が埋め込まれたテキストにバインドしている場合、それらはおそらくXMLセンチネルではなく、実際のchar 10値(または13)である必要があります。これは、XAML ファイルにリテラルの改行を書きたい場合のみです。

電球が切れた!

SQL 関数に入り、改行のテキスト表現を ... に置き換えました。

CHAR( 13 ) + CHAR( 10 )

...私のバインディングからコンバーターを削除し、TextBlock.Textちょうどそのように...うまくいきました!

于 2014-02-11T17:47:10.743 に答える
9

これは役に立ちましたが、XAMLの「Content=...」タグに追加するとエラーが発生しました。

コンテンツに複数の行があり、後で、指定しなくてもコンテンツに空白が残っていることがわかりました。そのため、それを回避して空白を「無視」するために、このように実装しました。

<ToolTip Width="200" Style="{StaticResource ToolTip}" 
         Content="'Text Line 1' 
                   &#x0a;&#x0d;'Text Line 2' 
                   &#x0a;&#x0d;'Text Line 3'"/>

これが他の誰かに役立つことを願っています。

(出力には、3つのテキスト行があり、それぞれの間に空の行があります。)

于 2011-07-06T05:44:48.940 に答える
5

これは古い質問にあることは承知していますが、それを追加したかっただけです

Environment.改行

コードを介してこれを行う場合にも機能します。

于 2012-05-30T19:57:00.107 に答える
3

また、動作しません

<TextBlock><TextBlock.Text>NO USING ABOVE TECHNIQUE HERE</TextBlock.Text>

大したことはありません。使用する必要があるだけです

<TextBlock Text="Cool &#x0a;Newline trick" />

代わりは。

于 2010-02-03T02:35:17.863 に答える
1
<TextBox 
    Name="myTextBox" 
    TextWrapping="Wrap" 
    AcceptsReturn="True" 
    VerticalScrollBarVisibility="Visible" />
于 2011-04-25T02:59:55.117 に答える