Binding の StringFormat で金額表示

Silverlight 4 から Binding に文字列のフォーマットを指定できる StringFormat が追加されました。

例えば、金額を表示するなら以下のような感じで書式指定の c を設定します。ここではスライダーで値を変更できるようにしています。

<StackPanel Orientation="Vertical">
   <Slider Orientation="Horizontal" Minimum="100" Maximum="10000" Name="ValueSlider" />
   <TextBlock FontSize="50" Text="{Binding Value,ElementName=ValueSlider, StringFormat='c'}" />
</StackPanel>

で、これを表示すると・・・・


まぁ、確かに金額書式なんですが・・・・。なぜに $ ・・・・。


どうもデフォルトは英語みたいです。で、言語を指定することにします。参考は以下。
http://msdn.microsoft.com/ja-jp/library/cc838238%28v=VS.95%29.aspx


日本語に指定するのは FrameworkElement.Language に指定するだけです。

<StackPanel Orientation="Vertical">
    <Slider Orientation="Horizontal" Minimum="100" Maximum="10000" Name="ValueSlider" />
    <TextBlock FontSize="50" Text="{Binding Value,ElementName=ValueSlider, StringFormat='c'}" Language="ja" />
</StackPanel>


これを表示すると以下のような感じで無事に表示されます。


が、毎度毎度全部のタグに書いてるのはめんどくさいです。ってことで、親要素に指定してみると、

<StackPanel Orientation="Vertical" Language="ja">
    <Slider Orientation="Horizontal" Minimum="100" Maximum="10000" Name="ValueSlider" />
    <TextBlock FontSize="50" Text="{Binding Value,ElementName=ValueSlider, StringFormat='c'}" />
</StackPanel>

ちゃんと継承されましたね。ってことで、一番親要素に指定しておけば楽チンそうです。


ちなみにコードで指定するには以下で。

valueTextBlock.Language = XmlLanguage.GetLanguage("ja");