2013-08-27 8 views
8

Ho un problema davvero strano relativo a .NET 4.5. Oggi un utente mi ha detto che non è in grado di inserire numeri mobili in una casella di testo (come "2.75"). La casella di testo non accetta ".", Che è il "separatore" corretto per i numeri mobili nella mia cultura ("de-CH").Problemi di TextBox strano con .NET 4.5 - no '.' consentito

Questo problema si è verificato dopo aver compilato il software con .NET 4.5 (in precedenza era 4.0).

Posso riprodurre questo errore. Tutte le altre caselle di testo nell'applicazione funzionano correttamente. La casella di testo è un normale controllo WPF. Nessun controllo definito dall'utente o qualcosa di simile.

Ancora: la casella di testo non accetta "." come personaggio. Sembra che lo ignori completamente. Ogni altro personaggio (anche quelli speciali come "@") va bene. La ricompilazione dell'applicazione su .NET 4.0 risolve il problema.

il codice XAML per la casella di testo è:

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

Definizione 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() si affievolisce solo un messaggio di testo al di sotto del reale casella di testo. Non è collegato alla casella di testo "interrotta" in alcun modo:

Quindi niente di speciale neanche qui.

quello che ho provato finora: - rimuovere la casella di testo, ricompilare, aggiungendo ancora una volta la casella di testo, ricompilare -> stessa situazione

non c'è un messaggio sul debugconsole quando cerco di entrare in un "".

Qualche idea su questo?

Grazie in anticipo!

+0

Mostraci la proprietà ProcessHours. È quella proprietà di tipo Int? Stai vincolando TextBox a un intero? –

+0

Oops. Ho pubblicato la proprietà sbagliata. Mi dispiace per quello La risposta di Sheridan ha risolto il mio problema. Ma grazie per l'aiuto comunque! – Mathew

+1

Ok allora evviva :) –

risposta

6

Questo è un problema abbastanza noto (e documentato) relativo ai controlli TextBox e ai valori associati a dati float. È possibile risolvere questo problema, con l'aggiunta di un StringFormat al vostro 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" /> 

Si prega di regolare il formato per soddisfare la vostra situazione. È possibile trovare più formati nel post Custom Numeric Format Strings su MSDN.

+0

Questo ha fatto il trucco. Non ero a conoscenza di questo problema. Grazie mille! – Mathew

Problemi correlati