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

Mat*_*hew 8 .net c# wpf textbox

我有一个与.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" />
Run Code Online (Sandbox Code Playgroud)

ProcessHours的定义:

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

Hours_TextChanged是:

private void Hours_TextChanged(object sender, TextChangedEventArgs e)
{
    UpdateHoursValidity();
}
Run Code Online (Sandbox Code Playgroud)

UpdateHoursValidity()只是淡化实际文本框下面的文本消息.它没有以任何方式与"损坏"文本框连接:

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

所以这里也没什么特别的.

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

当我尝试输入"."时,debugconsole上没有消息.

关于这个的任何想法?

提前致谢!

She*_*dan 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" />
Run Code Online (Sandbox Code Playgroud)

请调整格式以适合您的情况.您可以在MSDN 的自定义数字格式字符串帖子中找到更多格式.