Как поместить новую строку в элемент управления текстовым блоком wpf?

Я извлекаю текст из XML файла, и я хотел бы вставить некоторые новые строки, которые интерпретируются текстовым блоком как новые строки.

Я пробовал:

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

Но данные все еще отображаются без новой строки. Я установил содержимое <data> через свойство .Text через С#.

Что мне нужно, чтобы поместить в XML, чтобы он отображал новую строку в графическом интерфейсе?

Я пробовал что-то вроде этого вручную, устанавливая текст в XAML:

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

И хотя кодированный символ не отображается в графическом интерфейсе, он также не дает мне новую строку.

Ответ 1

Вы можете попробовать поместить новую строку в данные:

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

Если это не сработает, вам может понадобиться вручную проанализировать строку.

Если вам нужен прямой XAML, который легко, кстати:

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

Ответ 2

Для полноты: вы также можете сделать это:

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

Ответ 3

Вы также можете использовать привязку

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

И установите MyText следующим образом:

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

Ответ 4

вы должны использовать

 < 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

Ответ 5

Даже если это старый вопрос, я только что столкнулся с проблемой и решил ее иначе, чем данные ответы. Возможно, это может быть полезно для других.

Я заметил, что хотя мои XML файлы выглядели так:

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

Когда он был прочитан в моем коде С#, строка имела двойную обратную косую черту.

\\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();
    }
}

Ответ 6

Если все остальное не удается, вы также можете использовать

"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"

Ответ 7

<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>

Ответ 8

Использование System.Environment.NewLine - единственное решение, которое сработало для меня. Когда я попытался \r\n, он просто повторил фактическое \r\n в текстовом поле.

Ответ 9

Вы должны убедиться, что у текстового блока включена эта опция:

AcceptsReturn="True"

Ответ 10

Вставьте "разрыв строки" или "разрыв абзаца" в 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 преобразуются в\строки, сохраняются по желанию и остаются правильными при повторном открытии файла *.Rtf. Это то, что я нашел до сих пор после тяжелых попыток. Мои три строки кода должны быть окружены большим количеством кода (с циклами), чтобы установить элементы TextPointer (.Start.End.ContentStart.ContentEnd), куда должны идти линии и разрывы, что я успешно сделал для своих целей.