8

我遇到了一个与 .NET 4.5 相关的非常奇怪的问题。今天一位用户告诉我,他无法在文本框中输入浮点数(例如“2.75”)。文本框只是不接受“。”,这是我的文化中浮动数字的正确“分隔符”(“de-CH”)。

这个问题是在我用 .NET 4.5(以前是 4.0)编译软件之后发生的。

我可以重现这个错误。应用程序中的所有其他文本框都工作正常。文本框是一个常规的 WPF 控件。没有花哨的用户定义控件或类似的东西。

再说一遍:文本框就是不接受 '.' 作为一个角色。似乎它完全忽略了它。其他所有字符(甚至像“@”这样的特殊字符)都可以。在 .NET 4.0 上重新编译应用程序可以解决问题。

文本框的 xml 是:

<TextBox x:Name="_Hours" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" 
TextAlignment="Center" FontWeight="Bold" FontSize="16" Text="{Binding ProcessHours, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TextChanged="Hours_TextChanged" />

ProcessHours的定义:

partial class ProjectTask
{
    ...
    public double TotalProcessHours { get { return ProjectBookings.Sum(b => 
b.ProcessHours); }}
    ...
}

Hours_TextChanged 是:

private void Hours_TextChanged(object sender, TextChangedEventArgs e)
{
    UpdateHoursValidity();
}

UpdateHoursValidity() 只是在实际文本框下方淡入文本消息。它不以任何方式与“损坏的”文本框连接:

private void UpdateHoursValidity()
{
    string key = IsInvalidHoursWarning ? "ShowWarningStoryboard" : 
"HideWarningStoryboard";
    var storyboard = FindResource(key) as Storyboard;
    if(storyboard != null) storyboard.Begin();
}

所以这里也没什么好看的。

到目前为止我尝试了什么: - 删除文本框,重新编译,再次添加文本框,重新编译 - >相同的情况

当我尝试输入“.”时,调试控制台上没有消息。

关于这个有什么想法吗?

提前致谢!

4

2 回答 2

6

TextBox这是一个与控件和数据绑定float值相关的众所周知(并记录在案)的问题。您可以通过将 a 添加StringFormat到您的Binding:

<TextBox x:Name="_Hours" Grid.Row="9" Grid.Column="1" VerticalAlignment="Center" 
TextAlignment="Center" FontWeight="Bold" FontSize="16" Text="{Binding ProcessHours, 
Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{##.##}}" 
TextChanged="Hours_TextChanged" />

请根据您的情况调整格式。您可以在 MSDN上的自定义数字格式字符串帖子中找到更多格式。

于 2013-08-27T13:13:44.223 回答
2

在 Microsoft Connect 站点上详细讨论了导致此问题的 .NET 4.5 更改:https ://connect.microsoft.com/VisualStudio/feedback/details/737301/binding-to-wpf-textbox-seems-to -be-broken-in-net-4-5-beta

除了StringFormat解决方法之外,另一个选项是Delay为绑定设置 a。

于 2015-01-14T13:53:40.247 回答