42 lines
1.6 KiB
C#
42 lines
1.6 KiB
C#
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);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|