2011-01-27 19 views
12

Se lego lo Text in un TextBox a una proprietà float, il testo visualizzato non rispetta il decimale di sistema (punto o virgola). Invece mostra sempre un punto ('.'). Ma se visualizzo il valore in un MessageBox (utilizzando ToString()), viene utilizzato il decimale sistema corretto.TextBox non rispetta il decimale di sistema (punto o virgola)

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> 

codice dietro

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()); 
} 

A partire da ora, ho risolto questo con un convertitore che sostituisce punteggiano con il sistema decimale (che funziona) ma qual è la ragione per cui questo è necessario? È questo di progettazione e c'è un modo più semplice per risolvere questo?

SystemDecimalConverter (nel caso in cui qualcun altro ha lo stesso problema)

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]; 
    } 
} 

risposta

10
+0

+1, questo è fantastico! Grazie! Non ho il tempo di esaminare i link che hai fornito in questo momento, ma li controllerò non appena avrò tempo. Quindi aspetterò un paio d'ore prima di accettare la tua risposta per vedere se qualcun altro esce con qualcosa! Ottimo lavoro –

Problemi correlati