using System.Windows.Controls; namespace test { public class MacTextBox : TextBox { private string _lastText = ""; protected override void OnTextChanged(TextChangedEventArgs e) { string text = Text; if (PrepareText(ref text)) { Text = text; _lastText = Text; } else { Text = _lastText; } if (Text.Length > 0) CaretIndex = Text[Text.Length - 1] == '-' ? Text.Length - 1 : Text.Length; e.Handled = true; base.OnTextChanged(e); } private bool PrepareText(ref string text) { if (text.Length > 17) return false; text = text.ToUpper(); string t = ""; foreach (char c in text) { if ((c >= 48 && c <= 57) || (c >= 65 && c <= 70)) { t += c; if (t.Length == 2 || t.Length == 5 || t.Length == 8 || t.Length == 11 || t.Length == 14) { t += "-"; } } else if (c != ':' && c != '-') { return false; } } if (t.EndsWith("-")) t = t.Remove(t.Length - 1); if (t.Length > 17) return false; text = t; return true; } } }