2011-01-27 21 views
12

floatプロパティにTextBoxTextをバインドすると、表示されたテキストはシステム小数点(ドットまたはコンマ)に従いません。代わりに、常にドット( '。')が表示されます。しかし、私がMessageBoxの値を(ToString()を使用して)表示すると、正しいSystem Decimalが使用されます。TextBoxはシステム小数点(ドットまたはコンマ)を受け入れません

enter image description here

XAML

<StackPanel> 
    <TextBox Name="floatTextBox" 
      Text="{Binding FloatValue}" 
      Width="75" 
      Height="23" 
      HorizontalAlignment="Left"/> 
    <Button Name="displayValueButton" 
      Content="Display value" 
      Width="75" 
      Height="23" 
      HorizontalAlignment="Left" 
      Click="displayValueButton_Click"/> 
</StackPanel> 

コード今のよう

public MainWindow() 
{ 
    InitializeComponent(); 
    FloatValue = 1.234f; 
    this.DataContext = this; 
} 
public float FloatValue 
{ 
    get; 
    set; 
} 
private void displayValueButton_Click(object sender, RoutedEventArgs e) 
{ 
    MessageBox.Show(FloatValue.ToString()); 
} 

背後に、私は(システム小数点をドットに置き換えられコンバータでこれを解決してきましたこれは必要なのはなぜですか?これは設計であり、これを解決する簡単な方法はありますか?

SystemDecimalConverter(場合には他の誰かが同じ問題を抱えている)

public class SystemDecimalConverter : IValueConverter 
{ 
    private char m_systemDecimal = '#'; 
    public SystemDecimalConverter() 
    { 
     m_systemDecimal = GetSystemDecimal(); 
    } 
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value.ToString().Replace('.', m_systemDecimal); 
    } 
    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value.ToString().Replace(m_systemDecimal, '.'); 
    } 
    public static char GetSystemDecimal() 
    { 
     return string.Format("{0}", 1.1f)[1]; 
    } 
} 

答えて

10

このためのソリューションがありますように見える:

http://www.nbdtech.com/Blog/archive/2009/03/18/getting-a-wpf-application-to-pick-up-the-correct-regional.aspx

ここでは、おそらく助けることができるもう一つの議論は次のとおりです。

http://connect.microsoft.com/VisualStudio/feedback/details/442569/wpf-binding-uses-the-wrong-currentculture-by-default

+0

+1、これは素晴らしいことです!ありがとう!あなたが今すぐ提供したリンクを通過する時間がありませんが、私は時間がかかるとすぐにそれらをチェックします。だから私はあなたの答えを受け入れる前に数時間待って、他の誰かが何かを思い付くかどうかを見ます!すごい仕事 –

関連する問題