web-dev-qa-db-fra.com

Lier la zone de texte à la valeur flottante. Impossible d'entrer le point/virgule

Lorsque j'essaie de saisir un DOT ou une COMMA dans une zone de texte, par exemple 1.02 ou 83,33, la zone de texte m'empêche de saisir cette valeur (et l'entrée devient rouge). La zone de texte est liée à une propriété float. Pourquoi?

J'ai lié une zone 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");
    }
}

En Xaml

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

Je n'ai pas de validation personnalisée du tout pour le moment.

Également essayé décimal mais cela ne fonctionne pas non plus. Pour les ficelles tout fonctionne bien.

29
LukeSolar

Essayez d’ajouter une définition StringFormat à la liaison .

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

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

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

Voir Le blog de Sebastian Lux .

26
xmedeko

résoudre les problèmes de points et de virgules dans la liaison de zone de texte à décimal ou à virgule flottante 

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
Hisham