2011-11-09 4 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 Text="{Binding ....}"> 
    <i:Interaction.Behaviors> 
     <utility:TextBoxSelectAllOnFocusBehavior /> 
    </i:Interaction.Behaviors> 
</TextBox> 

: 는 행동이 당신의 XAML에 당신이 당신의 행동의 네임 스페이스에 대한 네임 스페이스 참조를 추가해야합니다 연결, 다음과 같이 텍스트 상자 마크 업의 자식으로 연결하려면 LostFocus 관련 이벤트에 연결하고 TextBox의 Text 속성 내용을 조정하고 싶습니다.

+0

어떻게 이벤트를 붙이거나 분리합니까? 그것은 기본적으로 모든 텍스트 상자에서 그것을 할 것인가 ??? –

+0

죄송합니다. 죄송합니다. 표시하지 않았습니다. 마크 업을 포함하도록 답변을 업데이트했습니다. – Jordan0Day