在 XAML 中向 Stringformat 添加换行符

Add newline to Stringformat in XAML

我将数据网格的列标题绑定到可观察的日期集合,以在列标题中显示日期和日期。这很好用。但是,我想使用字符串添加换行符或中断。如何做到这一点?

<DataGridTextColumn>
    <DataGridTextColumn.HeaderTemplate>
        <DataTemplate>
            <TextBlock TextWrapping="Wrap" Text="{Binding DataContext.Week.Days[1].Date, StringFormat=ddd dd.MM.yyyy, RelativeSource={RelativeSource AncestorType=DataGrid}}"/>

这会显示以下文本:Tue 06.12.2016 我想让它显示的是

星期二
2016 年 12 月 6 日

设置 TextBlock 的 Inlines 属性:

<TextBlock DataContext="{Binding DataContext.Week.Days[1].Date,
                         RelativeSource={RelativeSource AncestorType=DataGrid}}">
    <Run Text="{Binding Mode=OneWay, StringFormat=ddd}"/>
    <LineBreak/>
    <Run Text="{Binding Mode=OneWay, StringFormat=dd.MM.yyyy}"/>
</TextBlock>

对于希望在 StringFormat(或 ContentStringFormat,如果需要使用标签)中放置换行符的人们, 有办法。您可以使用:

HEX represenation of CR/LF &#x0d;&#x0a; (or just line feed &#x0a;):

因此,对于有问题的代码:

StringFormat=ddd&#x0d;&#x0a;dd.MM.yyyy

StringFormat 并不总是一种直观的语法,但我更喜欢将 Vimes 解决方案与 TargetNullValue 结合使用,而不是公认的解决方案。

这意味着我只能添加一个 line-break 如果第二个 运行 有一个值

<TextBlock>
  <Run Text="{Binding Message, Mode=OneTime}" />
  <Run Text="{Binding Exception, Mode=OneTime, TargetNullValue='', StringFormat={}&#x0d;&#x0a;{0}}"  />
</TextBlock>