为什么在XAML中的TimeSpan有不同的字符串格式?

7
我快疯了。有人能解释一下为什么这些字符串格式化相同的内容却如此不同吗?
<DataGridTextColumn Header="Max Time" IsReadOnly="True" Binding="{Binding MaxTime, StringFormat=hh\\:mm\\:ss, TargetNullValue=---}"> 

<DataGridTextColumn Header="Min Time" IsReadOnly="True">
    <DataGridTextColumn.Binding>
        <Binding Path="MinTime" StringFormat="{}{0:hh':'mm':'ss}" TargetNullValue=" --- "/>
    </DataGridTextColumn.Binding>
 </DataGridTextColumn>

当然,每个都不能在另一个上工作。

编辑:随着我使用WPF的时间越来越长,我越来越觉得它不是一个成熟的产品。

1个回答

12

我对格式化TimeSpan不是很精通,因此无法告诉你它们为什么会产生相同的结果,但你可以在这里阅读有关它的信息:Custom TimeSpan Format Strings

当然,它们互不起作用。

它们的工作方式是相同的,问题只是你应该在双引号内使用一个反斜杠。以下是正确的写法:

<Binding Path="MinTime"
         StringFormat="hh\\:mm\\:ss"
         TargetNullValue=" --- "/>

结果是hh\\\\:mm\\\\:ss。因此,您应该编写:

<Binding Path="MinTime"
         StringFormat="hh\:mm\:ss"
         TargetNullValue=" --- "/>

以下两个Bindings应该会产生相同的结果

<DataGridTextColumn Header="Max Time" IsReadOnly="True"
                    Binding="{Binding Path=MaxTime,
                                      StringFormat=hh\\:mm\\:ss,
                                      TargetNullValue=' --- '}"/>
<DataGridTextColumn Header="Min Time" IsReadOnly="True">
    <DataGridTextColumn.Binding>
        <Binding Path="MinTime"
                 StringFormat="hh\:mm\:ss"
                 TargetNullValue=" --- "/>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

接下来的两个也应该这样做

<DataGridTextColumn Header="Max Time" IsReadOnly="True"
                    Binding="{Binding Path=MaxTime,
                                      StringFormat={}{0:hh':'mm':'ss},
                                      TargetNullValue=' --- '}"/>
<DataGridTextColumn Header="Min Time" IsReadOnly="True">
    <DataGridTextColumn.Binding>
        <Binding Path="MinTime"
                 StringFormat="{}{0:hh':'mm':'ss}"
                 TargetNullValue=" --- "/>
    </DataGridTextColumn.Binding>
</DataGridTextColumn>

嗯,我本来说我试过了 : 但现在我又试了一遍,它居然可以用了...很奇怪...不管怎样还是谢谢。 - Ignacio Soler Garcia
@SoMos:是的,我知道,这种事情发生过 :) - Fredrik Hedblad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接