43

例如,当我尝试在文本框中输入点或逗号时,1.02或者83,33文本框阻止我输入这样的值(并且输入变为红色)。文本框绑定到一个浮点属性。为什么?

我已经将一个文本框绑定到一个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>

我现在根本没有自定义验证。

也尝试了十进制,但它也不起作用。对于字符串,一切正常。

4

3 回答 3

32

如果您有 .NET 4.5 或更高版本,则可以强制执行 4.5 之前的行为

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;

请参阅Sebastian Lux 的博客:在 .NET 4.5 中,默认情况下无法再输入分隔符(逗号或点)UpdateSourceTrigger = PropertyChanged。微软表示,这是有意的。

于 2016-03-11T14:22:48.767 回答
29

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

<TextBox Name="txtPower" Height="23" 
    TextWrapping="Wrap" Text="{Binding Path=Power, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged,StringFormat=N2}"></TextBox>
于 2013-01-30T09:48:10.533 回答
1

修复文本框绑定到十进制或浮点数中的点和逗号问题

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>
于 2017-07-06T10:51:44.080 回答