2012-03-28 5 views
0

Ich habe eine TextBox in einem WPF-Fenster an eine Abhängigkeitseigenschaft des Fensters vom Typ double gebunden (siehe unten). Jedes Mal, wenn der Benutzer in der TextBox wennTextBox mit CurrencyFormat und PropertyChanged Trigger akzeptiert keinen Text rechts

  1. Die TextBox leer ist, oder
  2. der gesamte Text ausgewählt ist,

der eingegebene Text nicht korrekt akzeptiert. Zum Beispiel: Wenn ich in einem dieser Szenarien eine '5' eintippe, lautet der resultierende Text "$ 5,00", aber der Caret befindet sich vor der '5' nach dem '$'. Wenn ich versuche "52.1" einzugeben, bekomme ich "$ 2.15.00".

<Window x:Class="WPF.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="154" Width="240" Name="ThisWindow" 
     Background="{StaticResource {x:Static SystemColors.AppWorkspaceBrushKey}}"> 
    <Grid> 
     <TextBox Text="{Binding ElementName=ThisWindow, 
           Path=Amount, 
           StringFormat={}{0:c}, 
           UpdateSourceTrigger=PropertyChanged}" 
       VerticalAlignment="Center" 
       HorizontalAlignment="Center" 
       MinWidth="100" /> 
    </Grid> 
</Window> 

Wenn ich das UpdateSourceTrigger-Attribut entferne, wird es korrekt eingegeben, aber das Währungsformat wird nicht beibehalten.

Irgendwelche Ideen?

+0

einen Konverter nicht bearbeitet wird. TextBox befasst sich eigentlich nur mit Text und wenn Sie an etwas anderes als Text binden, müssen Sie einige Annahmen treffen (Vermutungen). http://stackoverflow.com/questions/9050054/cannot-assign-a-null-value-to-a-nullable-int32-via-binding – Paparazzi

Antwort

5

Dies wird dadurch verursacht, dass versucht wird, die Formatierung nach jedem Drücken der Zeichen anzuwenden.

Als Alternative habe ich in der Regel Stil nur die TextBox so nur es Formatierung gilt, wenn es

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Text" Value="{Binding SomeValue, StringFormat=C}" /> 
    <Style.Triggers> 
     <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
      <Setter Property="Text" Value="{Binding SomeValue, UpdateSourceTrigger=PropertyChanged}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

Das ist, was ich am Ende meiner Frage meinte, als ich sagte, dass das Entfernen der Der Aktualisierungstrigger verwaltet das Format nicht. Ich erstelle eine Buchhaltungs-App und möchte die Formatierung beibehalten, wenn ich kann. – gregsdennis

+0

@gregsdennis Dieser Stil wird das Währungsformat beibehalten, aber nur, wenn der Benutzer nicht auf die 'TextBox' fokussiert ist. Sobald der Benutzer auf die TextBox klickt, wird die Formatierung gelöscht und nur die Nummer angezeigt. Wenn Sie in die 'TextBox' schreiben, wird bei jedem Tastendruck ein' PropertyChanged'-Ereignis ausgelöst, jedoch wird nicht versucht, die Nummer während der Eingabe zu formatieren. – Rachel

+0

Ich verstehe das. Ich möchte das Format beibehalten, während der Benutzer die Box eingibt. – gregsdennis