2013-05-20 72 views
3

是否有可能刪除焦點上的WPF文本框上的貨幣格式?該應用程序遵循MVVM。WPF文本框刪除焦點上的貨幣格式

<TextBox HorizontalAlignment="Left" 
     Height="23" 
     Margin="156,264,0,0" 
     TextWrapping="Wrap" 
     HorizontalContentAlignment="Right" 
     Text="{Binding Amount, StringFormat=c, ValidatesOnNotifyDataErrors=True}" 
     VerticalAlignment="Top" 
     Width="100" /> 

我需要格式化而文本框沒有焦點。但只有當它的焦點是使用戶易於編輯時才需要刪除它。刪除$的原因是,當您選擇標籤時,焦點位於$之前。這意味着用戶必須再次點擊或使用箭頭鍵移動到數字。

當用戶選中上面的文本框時,應該刪除貨幣符號。謝謝你的幫助。

回答

6

你可以寫在TextBox的重點是將要執行和此刻的你可以改變觸發StringFormat

TextBox風格:

<TextBox TextWrapping="Wrap" 
     Height="23" Width="200" 
     HorizontalAlignment="Left" HorizontalContentAlignment="Right" VerticalAlignment="Top"> 
    <TextBox.Style> 
     <Style TargetType="TextBox">     
      <Setter Property="Text" Value="{Binding Amount, StringFormat=C, UpdateSourceTrigger=LostFocus}" /> 
      <Style.Triggers> 
       <Trigger Property="Control.IsFocused" Value="True"> 
        <Setter Property="Text" Value="{Binding Amount, StringFormat=F2, UpdateSourceTrigger=LostFocus}" />        
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </TextBox.Style> 
</TextBox> 
+0

這與我走的方法是類似的到http://stackoverflow.com/questions/9910681/textbox-with-currencyformat-and-propertychanged-trigger-doesnt-accept-text-righ – isakavis

0

刪除StringFormat=c

<TextBox HorizontalAlignment="Left" Height="23" Margin="156,264,0,0" TextWrapping="Wrap" HorizontalContentAlignment="Right" 
      Text="{Binding Amount, ValidatesOnNotifyDataErrors=True}" VerticalAlignment="Top" Width="100" /> 

如果不解決這個問題,有什麼東西在幕後正在做你的Amount財產在你的視圖模型,它是將格式化。由於該代碼不是問題的一部分,因此除非您編輯您的帖子幷包含相關代碼,否則我無法幫助您。

+0

秒殺,我需要在文本框格式。但只有在有重點的時候才需要刪除它。 – isakavis

+0

爲什麼不直接在文本框之前放置貨幣符號?這樣你就不必擔心像這樣在焦點上來回切換字符串。 - 如果您不只是處理$,您可以從這篇文章中的信息中獲得當前的本地化貨幣符號。 http://stackoverflow.com/questions/2763128/get-the-currency-from-current-culture – qJake

0

如何使用屬性來設置字符串格式,而不是指定在XAML字符串格式,在加載虛擬機時設置該屬性值,c和文本框中GotFocus事件處理程序將其更改爲空字符串?

XAML:

StringFormat="{Binding MyStringFormat}" 

視圖模型:

private string myStringFormat; 
public string MyStringFormat 
{ 
    get { return myStringFormat; } 
    set 
    { 
     myStringFormat= value; 
     NotifyPropertyChanged(m => m.MyStringFormat); 
    } 
} 

查看:

void MyTextBox_GotFocus(object sender, EventArgs e) 
{ 
    myvm = DataContext as MyViewModel; 
    if (myvm == null) return; 
    myvm.MyStringFormat = string.Empty; 
} 

void MyTextBox_LostFocus(object sender, EventArgs e) 
{ 
    myvm = DataContext as MyViewModel; 
    if (myvm == null) return; 
    myvm.MyStringFormat = "c"; 
} 
+0

院長,謝謝你的細節。我正在審查以下鏈接http://stackoverflow.com/questions/9910681/textbox-with-currencyformat-and-propertychanged-trigger-doesnt-accept-text-righ&http://stackoverflow.com/questions/5594437/修改參數的文本框文本綁定通過使用的一種風格 – isakavis

+0

是的,觸發器應該很好,以及... –