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

Ign*_*cia 7 wpf xaml timespan string-formatting

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

<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>
Run Code Online (Sandbox Code Playgroud)

当然,每一个都不起作用.

编辑:我使用WPF越多,我觉得它不是一个成熟的产品.

Fre*_*lad 12

我不是格式化方面的专家,TimeSpan所以我无法确切地告诉你为什么它们会产生相同的结果,但你可以在这里阅读它:Custom TimeSpan Format Strings

当然,每一个都不起作用.

它们的工作方式相同,只是你应该在双引号中使用一个反斜杠.下列

<Binding Path="MinTime"
         StringFormat="hh\\:mm\\:ss"
         TargetNullValue=" --- "/>
Run Code Online (Sandbox Code Playgroud)

出来了hh\\\\:mm\\\\:ss.相反,你应该写

<Binding Path="MinTime"
         StringFormat="hh\:mm\:ss"
         TargetNullValue=" --- "/>
Run Code Online (Sandbox Code Playgroud)

以下两个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>
Run Code Online (Sandbox Code Playgroud)

以下两个应该如此

<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>
Run Code Online (Sandbox Code Playgroud)