2013-08-27 56 views
8

我有一個很奇怪的與.NET 4.5相關的問題。 今天一個用戶告訴我,他無法在文本框中輸入浮動數字(如「2.75」)。 該文本框不接受「。」,這是我的文化中的浮動數字(「de-CH」)中正確的「分隔符」。.NET 4.5的怪異文本框問題 - no'。'允許

在我使用.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(); 
} 

因此,這裏沒有什麼奇特的。

我試過到目前爲止: - 刪除文本框,重新編譯,再次添加文本框,重新編譯 - >同樣的情況

上有debugconsole沒有消息,當我試圖進入一個「」。

對此有何意見?

在此先感謝!

+0

向我們展示屬性ProcessHours。是類型Int的屬性?你是否將TextBox綁定到Integer? –

+0

糟糕。我發佈了錯誤的屬性。對於那個很抱歉。謝里登的回答雖然解決了我的問題。但是,無論如何感謝您的幫助! – Mathew

+1

好吧,然後歡呼:) –

回答

6

這是一個與TextBox控件和數據綁定float值有關的相當知名(且已記錄)的問題。你可以解決這個問題,通過增加StringFormatBinding

<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文章中找到更多格式。

+0

這沒有把戲。我不知道這個問題。非常感謝你! – Mathew