有没有办法让\n
在TextBlock
中换行?
<TextBlock Text="line1\nLine2" />
是否有更好的方法来强制在Text
属性中插入中间换行?
<LineBreak />
对我来说这不起作用,因为文本字符串是从外部来源设置的,所以它需要是Text
属性的值。
我熟悉LineBreak
,但这不是我要找的答案。
有没有办法让\n
在TextBlock
中换行?
<TextBlock Text="line1\nLine2" />
是否有更好的方法来强制在Text
属性中插入中间换行?
<LineBreak />
对我来说这不起作用,因为文本字符串是从外部来源设置的,所以它需要是Text
属性的值。
我熟悉LineBreak
,但这不是我要找的答案。
当我使用绑定时,&#10;
对我无效,但这个有效:
$"first line {Environment.NewLine} second line"
<TextBlock>
<Run Text="My nice text"/>
<LineBreak/>
<LineBreak/>
<Run Text="After some linebreaks, I'm back!"/>
</TextBlock>
虽然我来晚了,但是这大致是我的做法(请注意我的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>
<StackPanel>
<TextBlock FontSize="12" FontWeight="Bold" >My Text One</TextBlock>
<TextBlock FontFamily="Times New Roman" FontStyle="Italic">
- My Text Two
</TextBlock>
</StackPanel>
</TextBlock>
我曾经遇到过类似的问题,想要将一个包含XAML标记的字符串绑定到TextBlock上,即将声明性标记存储在字符串中以备后用。
我是这样做的:我对TextBlock进行了子类化,使InlineCollection可绑定,并编写了一个转换器,用于字符串和InlineCollection(实际上是Inlines的通用列表)之间的转换。
只需使用 AccessText 控件。您可以像使用标签一样使用它,并具有属性 TextWrapping="WrapWithOverflow"。
例如。
我的就是这样,而且它运行良好。此外,您在动态更改文本时不会遇到任何问题。