TextBox не учитывает десятичность системы (точка или запятая) - PullRequest
12 голосов
/ 27 января 2011

Если я связываю Text в TextBox со свойством float, то отображаемый текст не будет соответствовать десятичному числу системы (точка или запятая). Вместо этого он всегда отображает точку ('.'). Но если я отображаю значение в MessageBox (используя ToString ()), тогда используется правильный системный десятичный знак.

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

1 Ответ

10 голосов
/ 27 января 2011
...