Как поместить новую строку в элемент управления 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>
и хотя закодированный символ не появляется в графическом интерфейсе, он также не дает мне новую строку.
8 ответов:
вы можете попробовать поставить новую строку в данных:
<data>Foo bar baz baz bar</data>Если это не работает, вам может потребоваться проанализировать строку вручную.
Если вам нужен прямой XAML, это легко, кстати:
<TextBlock> Lorem <LineBreak/> Ipsum </TextBlock>
вы также можете использовать привязку
<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... 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