.NET 4.5出现奇怪的TextBox问题-没有';允许

本文关键字:没有 允许 问题 TextBox 5出 NET | 更新日期: 2023-09-27 18:29:07

我遇到了一个与.NET 4.5有关的非常奇怪的问题。今天,一位用户告诉我,他不能在文本框中输入浮点数(比如"2.75")。文本框不接受".",这是我的区域性("de CH")中用于浮点数的正确"分隔符"。

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

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

再说一遍:文本框就是不接受"作为一个角色。它似乎完全忽略了这一点。其他所有角色(即使是像"@"这样的特殊角色)都很好。在.NET 4.0上重新编译应用程序解决了这个问题。

文本框的xaml为:

<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" />

处理小时的定义:

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

Hours_TextChanged为:

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

UpdateHoursValidaty()只是在实际文本框下方淡入一条文本消息。它与"损坏"的文本框没有任何连接:

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

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

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

  • 专门在xaml(Language=de CH)中设置文本框的Language属性

  • 根据以下提示设置文化:如何为整个c#应用程序设置默认区域性信息

  • 根据这篇博客文章设置文化:http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting

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

关于这个有什么想法吗?

提前感谢!

.NET 4.5出现奇怪的TextBox问题-没有';允许

这是一个与TextBox控件和数据绑定float值有关的众所周知的问题(并已记录在案)。您可以通过在Binding:中添加StringFormat来解决此问题

<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上的"自定义数字格式字符串"文章中找到更多格式。

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

相关文章: