Подтвердить что ты не робот

Свяжите текстовое поле с плавающей запятой. Невозможно ввести точку/запятую

Когда я пытаюсь ввести DOT или COMMA в текстовое поле, например 1.02 или 83,33, текстовое поле не позволяет мне вводить такое значение (и вход становится красным). Текстовое поле привязано к свойству float. Почему?

Я привязал текстовое поле к свойству float Power класса, реализующего INotifyPropertyChanged.

private float _power;

public float Power
{
    get { return _power; }
    set
    {
        _power = value;
        OnPropertyChanged("Power");
    }
}

В Xaml

<TextBox Name="txtPower" Height="23" TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>

У меня нет пользовательской проверки сейчас.

Также попытался десятичный, но он тоже не работает. Для струны все работает нормально.

4b9b3361

Ответ 1

Попробуйте добавить определение привязки StringFormat к привязке. Например:

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>

Ответ 2

Если у вас .NET 4.5 или новее, попробуйте

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

Смотрите блог Себастьяна Люкс.

Ответ 3

для исправления проблемы с точкой и запятой в привязке текстового поля к десятичному или плавающему

1-  UpdateSourceTrigger = LostFocus 
2-  add string format StringFormat={}{0:#.##} to escape unneeded zeros 


<TextBox Name="txtPower" Height="23" 
         TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
         UpdateSourceTrigger=LostFocus ,StringFormat={}{0:#.##}}"></TextBox>