Почему эти разные строковые форматы в TimeSpan на XAML?

Я схожу с ума. Может ли кто-нибудь объяснить мне, почему эти строковые форматы, форматирующие одно и то же, такие разные?

<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, тем больше я чувствую, что это недостаточно зрелый продукт.


person Ignacio Soler Garcia    schedule 02.10.2011    source источник


Ответы (1)


Я не эксперт в форматировании TimeSpan, поэтому не могу точно сказать, почему они дают такой же результат, но вы можете прочитать об этом здесь: Строки настраиваемого формата TimeSpan

Конечно, одно не работает над другим.

Они работают одинаково, дело в том, что вы должны использовать одну обратную косую черту в двойных кавычках. Следующий

<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>
person Fredrik Hedblad    schedule 02.10.2011
comment
Ммммм, я бы сказал, что попробовал \: но теперь попробовал снова, и он работает ... странно ... в любом случае спасибо. - person Ignacio Soler Garcia; 02.10.2011
comment
@SoMos: Да, я знаю, бывает :) - person Fredrik Hedblad; 02.10.2011