it-source

wpf TextBlock 컨트롤에 새 줄을 추가하는 방법은 무엇입니까?

criticalcode 2023. 5. 1. 21:27
반응형

wpf TextBlock 컨트롤에 새 줄을 추가하는 방법은 무엇입니까?

XML 파일에서 텍스트를 가져오는 중입니다. 텍스트 블록 렌더링에서 새 행으로 해석되는 새 행을 삽입하려고 합니다.

시도해 봤습니다.

<data>Foo bar baz \n baz bar</data>

그러나 데이터는 여전히 새 선 없이 표시됩니다.의 내용을 설정했습니다.<data>경유로.TextC#을 통한 재산.

XML이 GUI에서 새 줄을 렌더링하려면 XML에 무엇을 넣어야 합니까?

XAML에서 텍스트를 수동으로 설정하는 것과 같은 방법을 시도했습니다.

<TextBlock Margin="0 15 0 0" Width="600">
There &#10;
is a new line.
</TextBlock>

그리고 인코딩된 문자가 GUI에 나타나지 않지만 새로운 줄도 제공하지 않습니다.

데이터에 새 줄을 추가할 수 있습니다.

<data>Foo bar baz 
 baz bar</data>

이 방법이 작동하지 않으면 문자열을 수동으로 구문 분석해야 할 수 있습니다.

직접적인 XAML이 필요한 경우 이는 간단합니다.

<TextBlock>
    Lorem <LineBreak/>
    Ipsum
</TextBlock>

완성도를 위해:다음과 같은 작업도 수행할 수 있습니다.

 <TextBlock Text="Line1&#x0a;Line 2"/>

x0A는 이스케이프된 16진수 라인 피드입니다.\n의 등가물

사용해야 합니다.

 < SomeObject xml:space="preserve" > once upon a time ...
      this line will be below the first one < /SomeObject>

또는 원하는 경우:

 <SomeObject xml:space="preserve" />  once upon a time... &#10; this line below < / SomeObject>

주의: 만약 당신이 둘 다 10파운드를 사용하고 당신의 텍스트에서 다음 줄로 간다면, 당신은 두 개의 빈 줄이 있을 것입니다.

자세한 내용은 여기: http://msdn.microsoft.com/en-us/library/ms788746.aspx

바인딩을 사용할 수도 있습니다.

<TextBlock Text="{Binding MyText}"/>

내 텍스트를 다음과 같이 설정합니다.

Public string MyText
{
    get{return string.Format("My Text \n Your Text");}
}

오래된 질문임에도 불구하고, 저는 방금 문제를 접했고 주어진 답과 다르게 풀었습니다.다른 사람들에게 도움이 될 수도 있습니다.

XML 파일이 다음과 같이 생겼음에도 불구하고,

<tag>
 <subTag>content with newline.\r\nto display</subTag>
</tag>

내 C# 코드로 읽었을 때 문자열에 이중 백슬래시가 있었습니다.

\\r\\n

이 문제를 해결하기 위해 추가 백슬래시를 제거하기 위해 ValueConverter를 작성했습니다.

public class XmlStringConverter : IValueConverter
{
    public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        string valueAsString = value as string;
        if (string.IsNullOrEmpty(valueAsString))
        {
            return value;
        }

        valueAsString = valueAsString.Replace("\\r\\n", "\r\n");
        return valueAsString;
    }

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

다른 모든 것이 실패할 경우 사용할 수도 있습니다.

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"
<TextBlock Margin="4" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12">
        <Run TextDecorations="StrikeThrough"> Run cannot contain inline</Run>
        <Span FontSize="16"> Span can contain Run or Span or whatever 
            <LineBreak />
        <Bold FontSize="22" FontFamily="Times New Roman" >Bold can contains 
            <Italic>Italic</Italic></Bold></Span>
</TextBlock>

시스템 사용.환경.NewLine은 저에게 효과가 있는 유일한 솔루션입니다.내가 \r\n을 시도했을 때, 그것은 단지 텍스트 상자에서 실제 \r\n을 반복했습니다.

다음과 같이 RichTextBox "rtb"에 "라인 구분" 또는 "문단 구분"을 삽입합니다.

var range = new TextRange(rtb.SelectionStart, rtb.Selection.End); 
range.Start.Paragraph.ContentStart.InsertLineBreak();
range.Start.Paragraph.ContentStart.InsertParagraphBreak();

NewLine 항목을 가져오는 유일한 방법은 "\r\n" 항목이 포함된 텍스트를 먼저 삽입한 다음 Selection 및/또는 TextRange 개체에서 작동하는 코드를 더 적용하는 것입니다.이렇게 하면 \par 항목이 \line 항목으로 변환되고 원하는 대로 저장되며 *.Rtf 파일을 다시 열 때에도 올바른 상태가 유지됩니다.그것이 제가 열심히 노력한 끝에 지금까지 발견한 것입니다.TextPointer 항목(.Start)을 설정하려면 세 개의 코드 줄을 더 많은 코드(루프 포함)로 둘러싸야 합니다.End.ContentStart.내용 끝) 라인과 브레이크가 가야 하는 곳, 제 목적을 위해 성공적으로 수행한 것입니다.

        StringBuilder somestext = new StringBuilder();
        somestext.AppendLine("this is some text on line 1");
        somestext.AppendLine(TB_Tag_Linebreak);
        somestext.AppendLine("this is some more text on line 2"); 
        return somestext.ToString();

\n을 시스템으로 바꿀 속성을 정의합니다.환경.세트의 새 줄:

private string _data;
public string Data
{
    get => _data; 
    set {
        _data = value.Replace("\\n", System.Environment.NewLine);
        OnPropertyChanged();
    }
}

속성에 텍스트 상자를 바인딩합니다.

<TextBox Text="{Binding Data}" />

xml 데이터를 읽고 속성에 할당합니다.

Data = ...data fetched from xml...

xml 데이터의 모든 \n은 TextBox에 새 줄로 표시됩니다.

@Ketobomb 제안에서, 당신의 스타일에 이것을 사용할 수 있습니까?

 <Style x:Key="TextBlockTestStyle" TargetType="TextBlock">       
    <Setter Property="Text" Value="line1!&#x0a;Line2&#x0a;Line3"/>
 </Setter>

다음과 같은 방식으로 사용합니다.

 <TextBlock x:Name="TextBlockTest" Style="{StaticResource TextBlockTestStyle}"/>

텍스트 블록에 다음 옵션이 활성화되어 있는지 확인해야 합니다.

AcceptsReturn="True"

언급URL : https://stackoverflow.com/questions/8525396/how-to-put-a-new-line-into-a-wpf-textblock-control

반응형