Почему эти разные строковые форматы на TimeSpan на XAML? - PullRequest
7 голосов
/ 02 октября 2011

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

<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 голосов
/ 02 октября 2011

Я не специалист по форматированию 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>
...