2013-08-27 6 views
8

Ich habe ein wirklich seltsames Problem mit .NET 4.5. Heute hat mir ein Benutzer gesagt, dass er keine Fließkommazahlen in eine Textbox eingeben kann (zB "2.75"). Die Textbox akzeptiert einfach nicht ".", Das ist der korrekte "Separator" für Floating-Zahlen in meiner Culture ("de-CH").Weird TextBox Probleme mit .NET 4.5 - nein '.' erlaubt

Dieses Problem trat auf, nachdem ich die Software mit .NET 4.5 kompiliert hatte (früher war es 4.0).

Ich kann diesen Fehler reproduzieren. Alle anderen Textfelder in der Anwendung funktionieren einwandfrei. Das Textfeld ist ein reguläres WPF-Steuerelement. Kein schickes benutzerdefiniertes Steuerelement oder ähnliches.

Noch einmal: Die Textbox akzeptiert nur '.' als ein Charakter. Es scheint, dass es es völlig ignoriert. Jedes andere Zeichen (auch spezielle wie "@") sind in Ordnung. Das erneute Kompilieren der Anwendung auf .NET 4.0 löst das Problem.

XAML für das Textfeld ist:

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

Definition von ProcessHours:

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

Hours_TextChanged ist:

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

UpdateHoursValidity() blendet nur eine Textnachricht unter dem tatsächlichen Textfeld. Es ist in keiner Weise mit dem "kaputten" Textkasten verbunden:

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

Also nichts Besonderes hier auch nicht.

Was ich bisher versucht: - das Textfeld zu entfernen, neu zu kompilieren, Hinzufügen der Textbox wieder neu zu kompilieren -> gleiche Situation

Es gibt keine Meldung auf dem debugconsole wenn ich versuche, eine Eingabe „“.

Irgendwelche Ideen zu diesem?

Vielen Dank im Voraus!

+0

Zeigen Sie uns die Eigenschaft ProcessHours. Ist das Eigentum des Typs Int? Verbindest du TextBox an einen Integer? –

+0

Hoppla. Ich habe die falsche Eigenschaft gepostet. Das tut mir leid. Sheridans Antwort löste mein Problem. Aber danke, dass du trotzdem geholfen hast! – Mathew

+1

Ok dann Prost :) –

Antwort

6

Dies ist ein ziemlich bekanntes (und dokumentiertes) Problem in Bezug auf TextBox Steuerelemente und Daten gebundene float Werte. Sie können dieses Problem beheben, indem Sie eine StringFormat zu Ihrem Binding hinzu:

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

Bitte stellen Sie das Format Ihrer Situation gerecht zu werden. Sie finden weitere Formate im Custom Numeric Format Strings Post bei MSDN.

+0

Dies hat den Trick. Ich war mir dieses Problems nicht bewusst. Vielen Dank! – Mathew