2011-12-15 19 views
1

當您將TextBox格式化爲貨幣並點擊進行編輯時,$和逗號不會導致問題,您可以編輯並選擇沒有問題的選項卡。當您將字段格式化爲百分比時,效果不佳。如何在WPF文本框中的百分比格式化字段上進行簡單編輯?

<TextBox Text="{Binding CostMarkup, 
         StringFormat=P}" 
       Style="{StaticResource ctrlSpacingTight}" /> 

如果基礎值爲0.1它正確地顯示爲10%,如果你去編輯它仍然顯示爲10%的%會造成問題,再加上它會從0.1基礎值更改爲10。我寫了一個轉換器來處理所有這些,但我想知道是否沒有更好的方法。特別是有沒有辦法來處理它的貨幣處理方式?

有一個內置的貨幣轉換器,所以我懷疑貨幣版本的StringFormat使用它。雖然有ZoomPerentageConverter它不會做我所期望的。有沒有辦法掛鉤到StringFormat = P,並讓它調用我的轉換器,而不必去每個實例,並明確指定它?

<TextBox Text="{Binding CostMarkup, 
         StringFormat=P, 
         Converter={StaticResource pctConverter}}" 
       Style="{StaticResource ctrlSpacingTight}" /> 

回答

3

我一直髮現,編輯時顯示原始數據最簡單,而不顯示格式化值。

下面是這是否使用觸發器

<Style x:Key="ctrlSpacingTight" TargetType="{x:Type TextBox}"> 
    <!-- Other Style Setters --> 
    <Setter Property="Text" Value="{Binding CostMarkup, StringFormat={}{0:C}}" /> 
    <Style.Triggers> 
     <Trigger Property="IsKeyboardFocused" Value="True"> 
      <Setter Property="Text" Value="{Binding CostMarkup}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

如果ctrlSpacingTight是一個全球性的風格的例子,您可以爲您的文本框的樣式是BasedOn您的全局樣式。

<Style x:Key="CurrencyTextBox" TargetType="{x:Type TextBox}" 
     BasedOn="{StaticResource ctrlSpacingTight}"> 
    <Setter Property="Text" Value="{Binding CostMarkup, StringFormat={}{0:C}}" /> 
    <Style.Triggers> 
     <Trigger Property="IsKeyboardFocused" Value="True"> 
      <Setter Property="Text" Value="{Binding CostMarkup}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

我太新來WPF來完全理解這種方法。你把這個代碼放在哪裏?具體來說,我很困惑TargetType(我認爲它適用於所有TextBox元素)和MyValue的特定Binding。我還認爲這個語法是在一個資源中進行的,但「MyValue」不會有意義嗎?我試圖搞亂這個,但無法讓它編譯。你可以發佈一個更完整的例子嗎?這不是我尋找的更簡單的方法,但我有興趣知道如何編輯「原始」值並顯示格式化數據。謝謝。 – Tod 2011-12-16 00:43:24

相關問題