コード例 #1
0
        /// <summary>
        /// Event handler for Textbox on preview text.  Called before displaying the entered text.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
        {
            if (IsReadOnly)
            {
                base.OnPreviewTextInput(e);
                return;
            }

            if (Mask != null)
            {
                if (IsValid(e.Text))
                {
                    int position = SelectionStart;
                    MaskTextFormatter maskProvider = MaskProvider;
                    if (position < maskProvider.Capacity)
                    {
                        position = maskProvider.InsertAt(e.Text, position);
                    }
                    RefreshText(maskProvider, position);
                }
                e.Handled = true;
            }


            base.OnPreviewTextInput(e);
        }
コード例 #2
0
        /// <summary>
        /// Use the mask to generate a new display string.
        /// </summary>
        /// <param name="maskProvider"></param>
        /// <param name="position"></param>
        private void RefreshText(MaskTextFormatter maskProvider, int position)
        {
            // Refresh string.
            this.Text = maskProvider.ToString();

            // Position cursor.
            this.SelectionStart = position;
        }
コード例 #3
0
        /// <summary>
        /// Handler for special keys like delete.
        /// </summary>
        /// <param name="e"></param>
        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            base.OnPreviewKeyDown(e);
            MaskTextFormatter maskProvider = MaskProvider;
            int  position = SelectionStart;
            int  length   = SelectionLength;
            bool refresh  = false;

            if (e.Key == Key.Delete && position < Text.Length)
            {
                if (length > 0)
                {
                    refresh = maskProvider.Remove(position, length);
                }
                else
                {
                    refresh = maskProvider.Remove(position);
                }
                e.Handled = true;
            }
            else if (e.Key == Key.Back)
            {
                if (length > 0)
                {
                    refresh = maskProvider.Remove(position, length);
                }
                else
                {
                    if (position > 0)
                    {
                        position--;
                        refresh = maskProvider.Remove(position);
                    }
                }
                e.Handled = true;
            }
            else if (e.Key == Key.Escape)
            {
                this.maskTextFormatter.Set(((MaskTextBox)e.OriginalSource).Text);
            }

            if (refresh == true)
            {
                RefreshText(maskProvider, position);
            }
        }
コード例 #4
0
        /// <summary>
        ///Force the text of the control to use the mask
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        private static object ForceText(DependencyObject sender, object value)
        {
            MaskTextBox textBox = (MaskTextBox)sender;

            if (textBox.Mask != null && value != null)
            {
                MaskTextFormatter provider = new MaskTextFormatter(textBox.Mask);
                provider.Validate += delegate(char character)
                { return(textBox.IsValid(character)); };
                provider.Set((string)value);
                return(provider.ToString());
            }
            else
            {
                return(value);
            }
        }