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

时间:2011-10-02 15:26:54

标签: wpf xaml string-formatting timespan

我疯了。有人可以解释一下为什么这些字符串格式格式化相同的东西是如此不同?

<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 个答案:

答案 0 :(得分: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>