2013年04月04日

IValueConverterの罠

すみません、罠ってほど大したもんじゃないです。
今回私が引っかかって悔しかったのでこんなタイトルにしてみました。
それではどんな罠に引っ掛かったかを簡単なサンプルで紹介。
(サンプルはWPFですがXAML+IValueConverterなら何でも同じでしょう、きっと)


csharp.PNG

こちらがC#のコード。(ソースコード貼り付ける方法が分からなかったので画像ですんません)
見づらいかもしれませんが、値とパラメーターを乗算して返すだけです。
Debugで書いているのはパラメーター(object parameter)の型。コメントに書いてあるようにString型です。



xaml.PNG

こちらがXAMLのコード。
Sliderの値を先ほどのコンバーターを使ってProgressBarとTextBlockに入れてます。
ConverterParameterには0.5が入っているので、Sliderの半分の値が出てほしいって感じです。



window.PNG

そして実行結果がこれ。
Sliderの半分の値が出てますね。期待通り♪


ところが、ある状態でこのアプリを起動すると
window2.PNG

半分どころか5倍になってる!
って罠にはまりました。


結論は単純でOSの「地域と言語」の設定が
local.PNG
こんな感じになってたんですね。
見づらいと思いますが、
小数点の記号が ,(カンマ)
桁区切り記号が .(ピリオド)
と、通常と逆になってたんです。

すると、ConverterParameterに0.5と書いてある部分の意味が変わります。0.5じゃなくて5って解釈されちゃうんですね。

こんな設定普通やらねーよ、と思うかもしれませんがそれは国内のみをターゲットにしている場合。
カンマとピリオドが日本と逆の国って結構あるんですよ。
アプリの多言語化を考えている人はお気をつけて。


いらないとは思いますがこのアプリのコードです。WpfApplication1.zip

posted by ぷにお at 18:50 | Comment(0) | Silverlight | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。