我正在开发一个WPF应用程序,我在使用时输入了两个日期选择 可以选择日期,但我对这些输入有一些问题,因为用户可以在其上写下他们想要的任何内容,如下图所示
有没有办法掩盖这些输入?作为dd / mm / yyy只允许用户写日期并自动插入/斜杠?
我尝试按照this example但没有工作,因为它只是在用户从日历中选择日期后才合成日期
我知道有一些“蒙面输入”,但它们不适用于datepicker输入
先谢谢。
修改
这是我的xaml代码
<Border Grid.Column="0" Grid.Row="1" Margin="10 0 0 0" Style="{StaticResource InputBorder}" Height="30" VerticalAlignment="Top">
<DatePicker x:Name="EDT_DATA_INICIAL"></DatePicker>
</Border>
<Border Grid.Column="1" Grid.Row="1" Margin="10 0 10 0" Style="{StaticResource InputBorder}" Height="30" VerticalAlignment="Top">
<DatePicker x:Name="EDT_DATA_FINAL"></DatePicker>
</Border>
答案 0 :(得分:1)
在DatePicker中创建一个PreviewTextInput
事件并处理其中的逻辑。以下示例将输入限制为数字和“/”。如果你愿意,你必须弄清楚如何自己输入“/”。
可能在构建字符串时循环遍历字符串的每个字符,并确定是否需要在某个点添加“/”。您可以e.Handled = true
阻止用户输入,然后根据需要设置DatePicker.Text
。这应该足以让你入门。
private void DatePicker_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
DatePicker dp = (DatePicker)sender;
Regex regex = new Regex("[^0-9/]"); //regex that matches allowed text
e.Handled = regex.IsMatch(e.Text);
}
正则表达式引用为System.Text.RegularExpressions
答案 1 :(得分:0)
只是使用他的事件PreviewTextInput
来补充@Tronald的回答我在keyUp事件中使用此代码补充了它
private void SetDateFormat(object sender, KeyEventArgs e)
{
DatePicker dt = (DatePicker)sender;
string justNumbers = new String(dt.Text.Where(Char.IsDigit).ToArray());
if (justNumbers.Length == 8)
{
string newDate = justNumbers.Insert(2, "/").Insert(5, "/");
try
{
dt.SelectedDate = DateTime.Parse(newDate);
}catch(Exception ex)
{
dt.text = "";
}
}
}
格式化仅使用数字或数字的日期 例如:18061993&gt; 18/06/1993当日期不正确时,它会清除输入防止错误