WPFテキストブロック、テキスト属性の改行


94

\n改行する方法はありTextBlockますか?

<TextBlock Text="line1\nLine2" />

または、Text属性内で中間の改行を強制するより良い方法はありますか?

<LineBreak />

これは機能しません。Textテキスト文字列が外部ソースから設定されているため、属性の値である必要があります。

私は精通してLineBreakいますが、私が探している答えではありません。


2
xamlでは、制御文字<TextBlock Name = "txtBlock" Text = "Line1&#10; Line2" />を使用する必要があります。\ n文字を使用する場合は、txtBlock.Text = "line1 \ nline2の背後のコードからのみ機能します";
JJ_Coder4Hire

&#10; xamlで正常に動作します。JJ_Coder4Hireをありがとう!
ケイリー

回答:


114

私はこれが古い質問を解決することを知っていますが、同じ問題がありました。私の解決策は、HTMLエンコードされたラインフィードを使用することでした(&amp;#10;)。

Line1&amp;#10;Line2

のように見えます

Line1
Line2

HTMLエンコードされた文字の詳細については、w3schoolsをご覧ください。


18
@Knasterbax <TextBlock>との間のコンテンツとしてテキストが指定されている</TextBlock>場合は、そうする必要があり<LineBreak/>ます。&#10;内側の作品Text属性:<TextBlock Text="..." />
ローマStarkov

6
「&#10;」私のために働いた。「&amp;」は必要なかった でも述べたように。この方法は、次のようにテキストを設定する場合にも機能します。<Setter Property = "Text" Value = "Line 1&#10;&#10; Line 2" />
EdwardM


10

最も簡単な方法は

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

つまり、XAMLコードを記述するだけで、HTMLのやC#の "\ n" <LineBreak />とまったく同じ意味に
なります。


1
ポールアレクサンダーの質問に対する重複した回答。
vapcguy

7

3
スコットコメントがわかりません。
jcollum 2009年

1
問題は、<LineBreak />がWindows XPでは機能しないことです。インストールされている.NETバージョンと関係がある可能性もあります。例外はなく、視覚要素が正しく表示されないこと以外にエラーはありません。
チャールズ


5

<LineBreak />は、GridやStackPanelなどのコレクション内にある場合は機能しません。このような場合、次のように機能します。

コレクション内のLineBreak


私はこれをRadioButtonのコンテンツとして試しました。Windows 7でプログラムを実行するまでは、すべてが正常に機能しているように見えました。Windows7では、ボタンは2つの行の間の垂直方向の中央に配置されていました。Windows 10では、デフォルトでボタンの上部が上部に配置されます。Windows 10はVerticalContentAlignmentプロパティを尊重しますが、Windows 7はそれを無視します。LineBreakソリューションを使用する必要がありました。
mrfelis 2018

5

それを使用する正しい方法は次のようになるかもしれません:

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

3

TextBlockのTextをバインドしている場合、他の回答はどれも機能しません。分割したい場所のバインディングテキストに '\ n'を追加するだけです。


2
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF単純な方法= !&#10;&#13;

!&#10;&#13; -TextBlock、HyperlinkTextなどのすべてのwpf、xaml、silverlightコントロールで作業する


1
(他の回答を修正して、削除されないようにフラグを立ててください)


1

AccessTextコントロールを使用するだけです。ラベルのように使用でき、プロパティTextWrapping = "WrapWithOverflow"があります。

例えば。

鉱山はそのようなものであり、うまく機能しています。また、テキストを動的に変更しても問題はありません。


1

私はパーティーに遅れましたが、これは多かれ少なかれ私がやった方法です(私のItemSourceはフォーマットされていないプレーンな文字列であり、何も '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();
    }
}

0

同様の問題があり、xamlマークアップの文字列をTextBlockにバインドしたいと思っていました。基本的に、宣言型マークアップをTextBlock内に文字列に格納して、後で使用できるようにします。

これが私がやった方法です:InlineCollectionをバインド可能にするためにTextBlockをサブクラス化し、文字列とInlineCollection(または実際にはInlinesの汎用リスト)の間にConverterを書きました。


0

&amp;#10;私がバインディングを使用したとき、これは私にはうまくいきませんでした。しかし、これはうまくいきます:

$"first line {Environment.NewLine} second line"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.