将文本框绑定到浮点值.无法输入点/逗号

Luk*_*lar 37 .net c# wpf

例如,当我尝试在文本框中输入DOT或COMMA时,1.02或者83,33文本框阻止我输入这样的值(并且输入变为红色).文本框绑定到float属性.为什么?

我已将文本框绑定到Power实现类的float属性INotifyPropertyChanged.

private float _power;

public float Power
{
    get { return _power; }
    set
    {
        _power = value;
        OnPropertyChanged("Power");
    }
}
Run Code Online (Sandbox Code Playgroud)

在Xaml

<TextBox Name="txtPower" Height="23" TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"></TextBox>
Run Code Online (Sandbox Code Playgroud)

我现在没有自定义验证.

也试过十进制但它也不起作用.对于字符串一切正常.

xme*_*eko 28

如果您使用的是.NET 4.5或更高版本,请尝试

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
Run Code Online (Sandbox Code Playgroud)

请参阅Sebastian Lux的博客.


小智 23

尝试将StringFormat定义添加到绑定.像这样:

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>
Run Code Online (Sandbox Code Playgroud)

  • 虽然这解决了输入类似1.1的问题,但它增加了多个问题,例如数字总是以小数显示(即1显示为1.00),使用框中的退格键或删除键不会因某些原因而起作用.将光标置于点,然后键入.11将导致1.11.11 (10认同)
  • 我使用了StringFormat = {} {##.##},这对我有用.不知道什么是N2.谢谢! (3认同)