source

WPF Textblock, Text Atribut의 줄 바꿈

ittop 2023. 4. 22. 10:31
반응형

WPF Textblock, Text Atribut의 줄 바꿈

이 모든 걸 할 수 있는 방법은 없을까?\n줄 바꿈을 하다TextBlock?

<TextBlock Text="line1\nLine2" />

아니면 중간선을 강제로 끊는 더 좋은 방법이 있을까요?Text속성?

<LineBreak />

이건 나한테는 안 통한다.그것은 그 가치여야 한다.Text텍스트 문자열이 외부 소스로부터 설정되기 때문입니다.

잘 알고 있습니다LineBreak하지만 그건 내가 원하는 답이 아니야.

이것을 시험해 보세요.

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

이것은 오래된 질문을 재확인하는 것이라는 것을 알지만, 나도 같은 문제가 있었다.해결책은 HTML 인코딩된 줄바꿈을 사용하는 것이었습니다.&amp;#10;).

Line1&amp;#10;Line2

처럼 보인다

회선 1
회선 2

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

가장 쉬운 방법은

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

그냥 XAML 코드를 쓰면<LineBreak />의 의미와 완전히 같다
HTML 또는 C#의 "\n"을 선택합니다.

<LineBreak/>

http://www.longhorncorner.com/UploadFile/mahesh/XamlLineBreak06092005152257PM/XamlLineBreak.aspx

줄을 두 개의 태그로 나누는 건 어때요?

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

<LineBreak/>는, 그리드나 스택 패널등의 컬렉션내에 있는 경우는 동작하지 않습니다.이러한 경우, 다음과 같이 동작합니다.

컬렉션 내의 LineBreak

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

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

같은 텍스트 블록의 여러 줄에서 가장 잘 작동한 방법은 다음과 같습니다.

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

TextWrapping="Wrap"을 사용하지 마십시오.TextWrapping="NoWrap"을 사용하거나 사용하지 마십시오.

  <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, Silverlight 컨트롤(텍스트 블록, 하이퍼링크 등)에서 작업텍스트 등

TextBlock의 Text를 바인딩하는 경우 다른 응답은 작동하지 않습니다.바인드 텍스트에 '\n'을 추가하여 끊기만 하면 됩니다.

이것.&amp;#10;바인딩을 사용했을 때는 효과가 없었습니다.하지만 이 방법은 효과적입니다.

$"first line {Environment.NewLine} second line"

파티에 늦었지만..이 방법은 거의 동일합니다(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();
    }
}

이것 또한 정상적으로 동작합니다.

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

비슷한 문제가 있어서 String of xaml 마크업을 TextBlock에 바인드하고 싶었습니다.TextBlock 내의 선언 마크업을 나중에 사용할 수 있도록 문자열에 저장하는 것이 중요합니다.

이렇게 했습니다.InlineCollection을 바인드하기 위해 TextBlock을 서브클래스하고 문자열과 InlineCollection 사이에 Converter를 썼습니다(또는 실제로는 Inlines의 일반 목록).

액세스만 사용텍스트 컨트롤레이블처럼 사용할 수 있고 TextWrapping= 특성이 있습니다."Wrap With Overflow"

예:

내 것도 그렇고 잘 되고 있어.또한 텍스트를 2진법적으로 변경해도 문제가 없습니다.

이것도 잘 동작합니다.

이 방법을 사용하면 각 행의 텍스트 속성을 필요에 따라 수정할 수 있습니다.

<TextBlock>
    <StackPanel>
        <TextBlock FontSize="12" FontWeight="Bold" >My Text One</TextBlock>
        <TextBlock FontFamily="Times New Roman" FontStyle="Italic">
            - My Text Two
        </TextBlock>
    </StackPanel>
</TextBlock>

언급URL : https://stackoverflow.com/questions/837367/wpf-textblock-linebreak-in-text-attribute

반응형