2

Customer オブジェクトのコレクションにバインドされた ListBox を含む XAML ページがあります。Customer クラスには、ListBoxItem テンプレート内の TextBox にバインドされた CreatedDate プロパティがあります。この既知の修正を App.xaml に追加したにもかかわらず、何らかの理由で日付が米国の形式で表示されます (私は英国にいます)。

FrameworkElement.LanguageProperty.OverrideMetadata(
   typeof(FrameworkElement),
   new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag)));

ページの他の場所の日付は正しくフォーマットされています。何か案は?

更新:- ListBoxItem テンプレートの日付は次のように表示されています:-

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>

ここに問題があるようです。コンストラクト (つまり ) ではなくプレーンを使用して CreatedDate をバインドすると、<TextBlock Text="{Binding CreatedDate}"/>正しくフォーマットされます。これはなぜでしょうか?Inlines 要素のバグですか?

4

1 に答える 1

0

これは、Microsoft フォーラムでもバグとして報告されています(ただし、バグ レポートへのリンクはありません)。フォーラムのモデレーターである Mike Danes は次のように述べています。

The problem is the Run element, this is not a FrameworkElement,
it's a FrameworkContentElement. 
Its language property was registered with a default value of en-US 
and it cannot be overriden.

それまでの間、実行時に言語を正しく設定することでこれを回避できます (これは MS フォーラムで提案されていますが、私自身は試していません)。

別の方法として、常に特定の形式が必要であることがわかっている場合は、バインディングで StringFormat オプションを使用します。

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate, StringFormat={}{0:dd/MMM/yyyy}}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>

ShortDate の StringFormat オプションは機能しないことに注意してください。明示的な形式を指定する必要があります。

<TextBlock>
    <TextBlock.Inlines>
        <Run Text="{Binding CreatedDate, StringFormat=d}"/>
        ...various other <Run elements ...
    </TextBlock.Inlines>
</TextBlock>
于 2013-01-10T14:54:06.260 に答える