2012-03-28 65 views
0

我有一個TextBox在WPF窗口綁定到類型double(見下文)的窗口的依賴項屬性。每當在TextBox用戶類型時具有CurrencyFormat和PropertyChanged觸發器的TextBox不接受文本權

  1. TextBox是空的,或
  2. 所有的文字被選中,

鍵入的文本被錯誤地接受。例如:如果在這兩種情況下都輸入'5',則結果文本爲「$ 5.00」,但插入符號位於「$」之後的「5」之前。如果我嘗試輸入「52.1」,我會得到「$ 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> 

如果我刪除UpdateSourceTrigger屬性,它的類型正確,但不保持貨幣格式。

任何想法?

+0

使用轉換器的格式。 TextBox實際上只處理文本,當你綁定到文本以外的東西時,它必須做出一些假設(猜測)。 http://stackoverflow.com/questions/9050054/cannot-assign-a-null-value-to-a-nullable-int32-via-binding – Paparazzi 2012-03-28 15:29:16

回答

5

這是由於它試圖在每次按下字符後應用格式。

作爲替代,我通常只是風格的TextBox所以只適用於當它沒有被編輯

<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

這就是我的意思是在我的問題結束時,當我說刪除更新觸發器不保持格式。我正在構建一個會計應用程序,如果可以的話,我想保留格式。 – gregsdennis 2012-03-28 16:17:39

+0

@gregsdennis此風格將保持貨幣格式,但僅當用戶不關注'TextBox'時。一旦用戶點擊「TextBox」,它將擺脫格式並顯示數字。在「TextBox」中鍵入仍然會在每個鍵擊中觸發一個「PropertyChanged」事件,但在鍵入時不會嘗試格式化數字。 – Rachel 2012-03-28 16:23:46

+0

我明白了。我想保持格式,而用戶在框中鍵入。 – gregsdennis 2012-03-28 16:26:29

相關問題