WPF Textblock, Text 속성의 줄 바꿈


96

이 할 수있는 방법이 있나요 \nA의 줄 바꿈을은 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 감사합니다!
케이 리

답변:


116

나는 이것이 오래된 질문을 복원한다는 것을 알고 있지만 같은 문제가있었습니다. 나를위한 해결책은 HTML로 인코딩 된 줄 바꿈 ( &amp;#10;) 을 사용하는 것이 었습니다 .

Line1&amp;#10;Line2

처럼 보인다

Line1
Line2

HTML 인코딩 문자에 대한 자세한 내용은 w3schools를 확인하십시오.


19
텍스트가 사이의 내용으로 지정된 경우 @Knasterbax <TextBlock>하고 </TextBlock>다음 그래, 당신이 필요합니다 <LineBreak/>. 속성 &#10;내부에서 작동 Text:<TextBlock Text="..." />
Roman Starkov

6
"& # 10;" 나를 위해 일했습니다. "& amp;"는 필요하지 않았습니다. 그래도 언급했듯이. 이 방법은 다음과 같이 텍스트를 설정할 때도 작동합니다. <Setter Property = "Text"Value = "Line 1 & # 10; & # 10; Line 2"/>
EdwardM

126

이 시도:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

1
직접 시도하지는 않았지만 xml : space = "preserve"를 시도한 다음 Text 속성에 직접 줄 바꿈을 포함 할 수 있습니다.
Paul Alexander

3
총액 사항. <LineBreak />입니다.
M. Dudley

10

가장 쉬운 방법은

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

따라서 XAML 코드를 작성하면는 HTML에서 <LineBreak />와 정확히 동일한 의미를 갖
거나 C #에서 "\ n"을 의미합니다 .


1
폴 알렉산더의 중복 답변.
vapcguy jul.


5

줄을 두 개의 태그로 나누는 것은 어떻습니까?

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

5

<LineBreak />는 Grid 또는 StackPanel과 같은 컬렉션 내에있는 경우 작동하지 않습니다. 이러한 경우 다음과 같이 작동합니다.

컬렉션 내부의 LineBreak


나는 이것을 RadioButton의 콘텐츠로 시도했습니다. Windows 7에서 프로그램을 실행하기 전까지는 모든 것이 잘 작동하는 것 같았습니다. Windows 7에서는 버튼이 두 줄 사이에 수직으로 중앙에있었습니다. Windows 10은 기본적으로 버튼 상단을 상단에 정렬합니다. Windows 10은 VerticalContentAlignment 속성을 존중하지만 Windows 7은이를 무시합니다. LineBreak 솔루션을 사용해야했습니다.
mrfelis

5

올바른 사용 방법은 다음과 같습니다.

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

3
  <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
(다른 답변을 수정하고 삭제 취소되도록 플래그 지정)

3

TextBlock의 텍스트를 바인딩하는 경우 다른 답변은 작동하지 않습니다. 분리하려는 바인딩 텍스트에 '\ n'을 추가하기 만하면됩니다.


2

이것은 또한 잘 작동합니다.

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

1

AccessText 컨트롤을 사용하십시오. 레이블처럼 사용할 수 있으며 TextWrapping = "WrapWithOverflow"속성이 있습니다.

예.

내 것은 그와 같고 잘 작동합니다. 또한 텍스트를 다이내믹하게 변경하는 데 문제가 없습니다.


1

나는 파티에 늦었지만 .. 이것은 내가 한 방식입니다 (내 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();
    }
}

0

비슷한 문제가 발생하여 String of xaml 태그를 TextBlock에 바인딩하고 싶었습니다. 나중에 사용하기 위해 TextBlock 내부에 선언적 태그를 문자열에 저장하는 것이 필수적입니다.

이것이 내가 한 방법입니다 : InlineCollection을 바인딩 가능하게 만들기 위해 TextBlock을 하위 클래스로 만들고 문자열과 InlineCollection (또는 실제로 Inline의 일반 목록) 사이에 변환기를 작성했습니다.


0

&amp;#10;바인딩을 사용했을 때 이것은 나를 위해 작동하지 않았습니다. 그러나 이것은 작동합니다.

$"first line {Environment.NewLine} second line"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.