蒙面文本框 - 隐藏蒙版

时间:2013-06-25 15:27:38

标签: c# wpf wpftoolkit mask maskedtextbox

我正在使用WPF扩展工具包,我想知道是否可以隐藏掩码,然后在用户输入时,MaskedTextBox开始掩盖文本。

默认设置是将蒙版显示为文本。例如,掩码是

 (99)999-9999

默认文字为:

 (__)___-____

我想要一个空白文本,就像一个javascript模板。

修改

我已经尝试将ClipboardMaskFormat更改为“ExcludePromptAndLiterals”和“HidePromptOnLeave”为true,但不起作用。

2 个答案:

答案 0 :(得分: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时才可见。

答案 1 :(得分:0)

我有类似的问题。我需要删除所有&#34; _&#34;因此,当他/她在掩码文本框中输入IP时,客户不会感到困惑。我做的是

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

我将PromptChat设置为&#34; &#34; (一片空白)并且工作得很好。