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



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



Я пробовал:



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


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



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



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



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


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

1045   8  

8 ответов:

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

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

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

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

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

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

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

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

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

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

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

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

 < 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

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

Я заметил, что, хотя мои 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 в текстовом поле.

Comments

    Ничего не найдено.