Improved Text input for datetime picker Control

This commit is contained in:
Daniel Schick 2024-06-23 15:31:55 +02:00
parent fc63931d6b
commit eb62097278
2 changed files with 41 additions and 2 deletions

View File

@ -46,7 +46,7 @@
<ColumnDefinition Width=".5*" /> <ColumnDefinition Width=".5*" />
<ColumnDefinition Width=".5*" /> <ColumnDefinition Width=".5*" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<xctk:DateTimePicker x:Name="datePickerETD" Grid.Column="0" Grid.Row="0" Margin="2" Format="Custom" FormatString="dd.MM. yyyy HH:mm" ValueChanged="datePickerETD_ValueChanged"/> <xctk:DateTimePicker x:Name="datePickerETD" Grid.Column="0" Grid.Row="0" Margin="2" Format="Custom" FormatString="dd.MM. yyyy HH:mm" ValueChanged="datePickerETD_ValueChanged" PreviewKeyUp="datePickerETD_PreviewKeyUp" PreviewTextInput="datePickerETD_PreviewTextInput"/>
<xctk:DateTimePicker x:Name="datePickerETD_End" Grid.Column="1" Grid.Row="0" Margin="2" Format="Custom" FormatString="dd.MM. yyyy HH:mm" ValueChanged="datePickerETD_ValueChanged"/> <xctk:DateTimePicker x:Name="datePickerETD_End" Grid.Column="1" Grid.Row="0" Margin="2" Format="Custom" FormatString="dd.MM. yyyy HH:mm" ValueChanged="datePickerETD_ValueChanged"/>
</Grid> </Grid>
<Label Content="{x:Static p:Resources.textBerth}" Grid.Column="0" Grid.Row="2" HorizontalContentAlignment="Right" FontWeight="Bold"/> <Label Content="{x:Static p:Resources.textBerth}" Grid.Column="0" Grid.Row="2" HorizontalContentAlignment="Right" FontWeight="Bold"/>

View File

@ -4,8 +4,15 @@
using BreCalClient.misc.Model; using BreCalClient.misc.Model;
using System; using System;
using System.Text.RegularExpressions;
using System.Windows; using System.Windows;
using System.Windows.Controls.Primitives;
using System.Windows.Controls;
using Xceed.Wpf.Toolkit;
using static BreCalClient.Extensions; using static BreCalClient.Extensions;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Media;
namespace BreCalClient namespace BreCalClient
{ {
@ -66,9 +73,11 @@ namespace BreCalClient
(App.Participant.IsTypeFlagSet(ParticipantType.BSMD) && allowBSMD); (App.Participant.IsTypeFlagSet(ParticipantType.BSMD) && allowBSMD);
this.EnableControls(); this.EnableControls();
} }
private void buttonOK_Click(object sender, RoutedEventArgs e) private void buttonOK_Click(object sender, RoutedEventArgs e)
{ {
this.CopyToModel(); this.CopyToModel();
@ -339,5 +348,35 @@ namespace BreCalClient
#endregion #endregion
private void datePickerETD_PreviewKeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
}
private void datePickerETD_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
DateTimePicker dp = (sender as DateTimePicker);
// Das ist der richtige Ansatz, funktioniert aber bei der Jahresangabe noch nicht ganz richtig.
// Die vom Agenten "vorgeschlagene" Zeit könnte auch der Watermark sein?
string text = dp.Text + e.Text;
dp.Template.LoadContent();
if (Regex.IsMatch(text, @"^\d{3}"))
{
e.Handled = true;
WatermarkTextBox tb = dp.Template.FindName("PART_TextBox", dp) as WatermarkTextBox;
tb.Text = Regex.Replace(text, @"(\d{2})(\d)", "$1.$2");
tb.CaretIndex = tb.Text.Length;
}
else if (Regex.IsMatch(text, @"^(\d{2}\.\d{3})"))
{
e.Handled = true;
WatermarkTextBox tb = dp.Template.FindName("PART_TextBox", dp) as WatermarkTextBox;
tb.Text = Regex.Replace(text, @"(\d{2}\.\d{2})(\d)", "$1.$2");
tb.CaretIndex = tb.Text.Length;
}
}
} }
} }