web-dev-qa-db-ja.com

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

\nTextBlockで改行させる方法はありますか?

<TextBlock Text="line1\nLine2" />

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

<LineBreak />

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

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

82
ScottCate

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

Line1&amp;#10;Line2

のように見える

ライン1
2行目

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

110
Noaki

これを試して:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
116
Paul Alexander

最も簡単な方法は

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

したがって、XAMLコードを記述するだけで、<LineBreak />はまったく同じ意味を持ちます
HTMLで、またはC#で「\ n」。

10
Stephane Halimi
7
jcollum

行を2つのタグに分割するのはどうですか?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
5

正しい使用方法は次のとおりです。

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
4
radu florescu

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

LineBreak inside a collection

3
user2063329

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

2
newman

私はパーティーに遅れていますが、これは多かれ少なかれ私がやった方法です(私のItemSourcesはフォーマットされていないプレーンな文字列であり、何も '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();
    }
}
1
Dan
  <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;-すべてのwpf、xaml、TextBlock、HyperlinkTextなどのsilverlightコントロールで動作します。

1
user1551704

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

例えば。

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

1
MelloG

これもうまくいきます:

<TextBlock>
    <Run Text="My Nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>

私は同様の問題を抱えていたため、xamlマークアップの文字列をTextBlockにバインドしたいと考えていました。後で使用するために、宣言的マークアップをTextBlock内の文字列に本質的に保存します。

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

0
Jodrell