我有一个与.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" />
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();
}
这里也没什么特别的。
到目前为止我尝试了什么: - 删除文本框,重新编译,再次添加文本框,重新编译 - &gt;相同的情况
专门在xaml中设置文本框的语言属性(语言= de-CH)
根据以下提示设置文化: how to set default culture info for entire c# application
根据此博文设置文化: http://www.west-wind.com/weblog/posts/2009/Jun/14/WPF-Bindings-and-CurrentCulture-Formatting
当我尝试输入“。”时,debugconsole上没有消息。
关于这个的任何想法?
提前致谢!
答案 0 :(得分:6)
这是一个与TextBox
控件和数据绑定float
值相关的众所周知(并且已记录)的问题。您可以通过向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的Custom Numeric Format Strings帖子中找到更多格式。
答案 1 :(得分:2)
有关.NET 4.5更改的详细讨论会导致Microsoft Connect站点上出现此问题:https://connect.microsoft.com/VisualStudio/feedback/details/737301/binding-to-wpf-textbox-seems-to-be-broken-in-net-4-5-beta
除StringFormat
解决方法外,另一个选项是为绑定设置Delay
。