Liez textbox à float value. Impossible d'entrer point / virgule

quand j'essaie d'entrer un point ou une virgule dans une zone de texte, par exemple 1.02 ou 83,33 la boîte de texte m'empêche d'entrer une telle valeur (et l'entrée devient rouge). La textbox est liée à une propriété float. Pourquoi?

j'ai relié une boîte de texte à une propriété float Power d'une classe implémentant INotifyPropertyChanged.

private float _power;

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

Dans Le Code Xaml

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

Je n'ai aucune validation personnalisée pour le moment.

Aussi essayé décimal, mais il ne fonctionne pas non plus. Pour chaîne tout fonctionne bien.

26
demandé sur John Saunders 2013-01-30 13:44:58

3 réponses

essayez d'ajouter une définition StringFormat à la reliure. Comme ceci:

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>
15
répondu yonigozman 2013-01-30 09:50:17

si vous avez .NET 4.5 ou plus récent, essayez

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

Voir le blog de Sebastian Lux.

23
répondu xmedeko 2016-03-11 14:22:48

pour fixer le point et la virgule question dans la zone de texte de liaison à la décimale ou float

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>
0
répondu Hisham 2017-07-06 10:51:44