2011-11-09 10 views
0

テキストボックスにテキストボックスに書式を表示して編集時に削除する簡単な方法はありますか?WPFでのテキストボックス値のフォーマット方法

例:お金の価値を求めています。ユーザーが値5.5の入力を終了すると、$ 5.00が表示されます。ユーザーがテキストボックスを再読み込みすると、5.5に戻るはずです。

ありがとう。

編集:私がしようとしているのは、テキストボックスにバインディングが設定されていないことを除けば、コンバーターに相当します。

答えて

1

これにはいくつかの解決策があります。おそらく、最も簡単なのはカスタムビヘイビア(System.Windows.Interactivity.dllを参照する必要があります)を実装することです。& GotFocusやLostFocusのようないくつかのイベントTextBoxを公開します。

using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Input; 
using System.Windows.Interactivity; 

namespace TextBoxUtility 
{ 
    public class TextBoxSelectAllOnFocusBehavior : Behavior<TextBox> 
    { 
     protected override void OnAttached() 
     { 
      base.OnAttached(); 

      this.AssociatedObject.PreviewMouseLeftButtonDown += OnPreviewMouseLeftButtonDown; 
      this.AssociatedObject.GotKeyboardFocus += OnSelectAll; 
      this.AssociatedObject.MouseDoubleClick += OnSelectAll; 
     } 

     protected override void OnDetaching() 
     { 
      this.AssociatedObject.PreviewMouseLeftButtonDown -= OnPreviewMouseLeftButtonDown; 
      this.AssociatedObject.GotKeyboardFocus -= OnSelectAll; 
      this.AssociatedObject.MouseDoubleClick -= OnSelectAll; 
      base.OnDetaching(); 
     } 

     private static void OnPreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
     { 
      var textbox = sender as TextBox; 

      if (textbox != null && !textbox.IsKeyboardFocusWithin) 
      { 
       textbox.Focus(); 
       e.Handled = true; 
      } 
     } 

     private static void OnSelectAll(object sender, RoutedEventArgs e) 
     { 
      var textbox = sender as TextBox; 
      if (textbox != null) 
      { 
       textbox.SelectAll(); 
      } 
     } 

編集:ここで私はそれが集中しますときのTextBoxのテキストをすべて選択するためにやったサンプルのテキストボックス(TextBox)までの動作をフックする方法を示すことを忘れていました。 、行動を添付するには、あなたのXAMLで、あなたの行動の名前空間に名前空間の参照を追加し、そのようなテキストボックスマークアップの子としてそれを添付する必要があります :

<TextBox Text="{Binding ....}"> 
    <i:Interaction.Behaviors> 
     <utility:TextBoxSelectAllOnFocusBehavior /> 
    </i:Interaction.Behaviors> 
</TextBox> 

あなたは似た何かをすることができ、 LostFocus関連のイベントに接続し、TextBoxのTextプロパティの内容を調整したいと思うでしょう。

+0

どのようにイベントをアタッチまたはデタッチしますか?それはデフォルトですべてのテキストボックスでそれを行いますか? –

+0

おっと、すみません、それを忘れてしまいました。そのマークアップを含めるように答えを更新しました。 – Jordan0Day

関連する問題