2013-06-25 1 views
0

Я использую расширенный набор инструментов WPF, и я хочу знать, можно ли скрыть маску, а затем, когда пользователь печатает, MaskedTextBox начинает маскировать текст.Masked Text Box - Hide Mask

Настройки по умолчанию - показать маску в виде текста. Например, маска

(99)999-9999 

текст по умолчанию будет:

(__)___-____ 

Я хочу пустой текст, вроде яваскрипта маски.

Edit:

Я уже попытался изменить ClipboardMaskFormat к "ExcludePromptAndLiterals" и "HidePromptOnLeave" истина, но не работает.

ответ

2

Я думаю, вы можете сделать это с Behavior<MaskedTextBox>

что-то вроде:

public class MaskVisibilityBehavior : Behavior<MaskedTextBox> { 
    private FrameworkElement _contentPresenter; 

    protected override void OnAttached() { 
    base.OnAttached(); 
    AssociatedObject.Loaded += (sender, args) => { 
     _contentPresenter = AssociatedObject.Template.FindName("PART_ContentHost", AssociatedObject) as FrameworkElement; 
     if (_contentPresenter == null) 
     throw new InvalidCastException(); 
     AssociatedObject.TextChanged += OnTextChanged; 
     AssociatedObject.GotFocus += OnGotFocus; 
     AssociatedObject.LostFocus += OnLostFocus; 
     UpdateMaskVisibility(); 
    }; 
    } 

    protected override void OnDetaching() { 
    AssociatedObject.TextChanged -= OnTextChanged; 
    AssociatedObject.GotFocus -= OnGotFocus; 
    AssociatedObject.LostFocus -= OnLostFocus; 
    base.OnDetaching(); 
    } 

    private void OnLostFocus(object sender, RoutedEventArgs routedEventArgs) { 
    UpdateMaskVisibility(); 
    } 

    private void OnGotFocus(object sender, RoutedEventArgs routedEventArgs) { 
    UpdateMaskVisibility(); 
    } 

    private void OnTextChanged(object sender, TextChangedEventArgs textChangedEventArgs) { 
    UpdateMaskVisibility(); 
    } 

    private void UpdateMaskVisibility() { 
    _contentPresenter.Visibility = AssociatedObject.MaskedTextProvider.AssignedEditPositionCount > 0 || 
            AssociatedObject.IsFocused 
             ? Visibility.Visible 
             : Visibility.Hidden; 
    } 
} 

и использования:

<xctk:MaskedTextBox Mask="(000) 000-0000" 
        ValueDataType="{x:Type s:String}"> 
    <i:Interaction.Behaviors> 
    <local:MaskVisibilityBehavior /> 
    </i:Interaction.Behaviors> 
</xctk:MaskedTextBox> 

Теперь формат MaskedTextBox подсказки будет виден только когда либо у него есть фокус, или в нем есть действующий Value.

0

У меня была аналогичная проблема. Мне нужно было удалить все символы «_», поэтому клиент не будет путать в то время, когда он/она вводит в maskedtextbox IP. То, что я сделал, было

<wpx:MaskedTextBox IncludePromptInValue="True" IncludeLiteralsInValue="False" Mask="000,000,000,000" PromptChar=" "/> 

Я установил PromptChat как «» (пустое пространство) и отлично работал.