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

C# 将文本框绑定到浮点值。无法输入点/逗号,c#,.net,wpf,C#,.net,Wpf,当我试图在文本框中输入点或逗号时,例如1.02或83,33文本框阻止我输入这样的值(并且输入变为红色)。文本框绑定到浮点属性。为什么? 我已经将一个文本框绑定到实现INotifyPropertyChanged的类的float属性Power private float _power; public float Power { get { return _power; } set { _power = value; OnPropertyCha

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

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

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>

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


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

尝试向绑定添加StringFormat定义。 像这样:


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

System.Windows.FrameworkCompatibilityPreferences.KeepTextBoxDisplaySynchronizedWithTextProperty = false;
见:
在.NET 4.5中,默认情况下,无法再使用
UpdateSourceTrigger=PropertyChanged
输入分隔符(逗号或点)。微软表示,这是有意的

修复文本框绑定到小数或浮点的点和逗号问题

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>
1-UpdateSourceTrigger=LostFocus
2-添加字符串格式StringFormat={}{0:#.###}以转义不需要的零

我使用了StringFormat={}{{}{{{35;}.},这对我很有用。不知道是什么。谢谢@LukeSolar为您提供了一个答案,虽然这解决了输入1.1之类的内容的问题,但它添加了多个问题,例如数字总是以小数显示(即1显示为1.00),由于某些原因,使用空格或删除框中的键将不起作用。将光标放在圆点之前,然后键入.11将得到1.11。11@pixel我也经历过同样的行为,这是无法接受的。你找到解决办法了吗,除了将
UpdateSourceTrigger
更改为
LostFocus
之外,如果您需要
UpdateSourceTrigger=PropertyChanged
的话,对于使用
StringFormat
的任何人来说,一种可能的解决方法是绑定到
字符串
属性,然后在setter中验证该字符串。您还可以从逻辑上将它连接到
浮点
双精度
、或
十进制
属性,这样两个值都将同步。链接已断开,这当然就是为什么您不应该只提供链接答案的原因。@a.R.这是完整的答案。只有一行代码。这个链接只是为了学分。它只是建议“试试这个”,这意味着它可能不起作用。没有解释,没有背景。只是一个断开的链接。如果你认为一行可以完成所有的工作,那么至少进行一次编辑并删除断开的链接。请注意,这将影响所有文本框。
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>