using System.Text.RegularExpressions; using System.Windows.Input; using Xceed.Wpf.Toolkit; namespace BreCalClient { public class DateTimePickerExt : DateTimePicker { protected override void OnPreviewTextInput(TextCompositionEventArgs e) { base.OnPreviewTextInput(e); if (this.Template.FindName("PART_TextBox", this) is not WatermarkTextBox tb) return; // strip input after caret string subText = (tb.CaretIndex > 0) ? this.Text[..tb.CaretIndex] : tb.Text; // Range operator instead of Substring(0, tb.CaretIndex) string text = subText + e.Text; // System.Diagnostics.Debug.WriteLine("C:" + this.Text + " E: " + e.Text + " Caret: " + tb.CaretIndex + " Subt: " + subText); // 10 char eingabe "am Stück" if (Regex.IsMatch(text, @"^\d{10}")) { e.Handled = true; tb.Text = Regex.Replace(text, @"(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})", "$1.$2.20$3 $4:$5"); tb.CaretIndex = tb.Text.Length; tb.SelectedText = ""; } // nur die Zeit wird markiert und mit 4 Zahlen befüllt, diese Regel setzt den Doppelpunkt else if (Regex.IsMatch(text, @"^(\d{2}\.\d{2}\. \d{4} \d{3})")) { e.Handled = true; tb.Text = Regex.Replace(text, @"(\d{2}\.\d{2}\. \d{4} \d{2})(\d)(.*)", "$1:$2"); // System.Diagnostics.Trace.WriteLine("Replaced: " + tb.Text); tb.CaretIndex = tb.Text.Length; tb.Select(tb.Text.Length, 0); } } } }