我遇到了一个与 .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();
}
UpdateHoursValidity() 只是淡化实际文本框下方的文本消息。它不以任何方式与“损坏的”文本框连接:
private void UpdateHoursValidity()
{
string key = IsInvalidHoursWarning ? "ShowWarningStoryboard" :
"HideWarningStoryboard";
var storyboard = FindResource(key) as Storyboard;
if(storyboard != null) storyboard.Begin();
}
所以这里也没什么特别的。
到目前为止我尝试过的:
- 删除文本框,重新编译,再次添加文本框,重新编译 -> 相同的情况
在 xaml 中专门设置文本框的语言属性(Language=de-CH)
根据以下提示设置文化:如何为整个 C# 应用程序设置默认区域性信息 https://stackoverflow.com/questions/13354211/how-to-set-default-culture-info-for-entire-c-sharp-application
根据这篇博文设置文化:http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting
当我尝试输入“.”时,调试控制台上没有任何消息。
对这个有什么想法吗?
提前致谢!