WPF - DatePicker Masked输入

时间:2018-03-02 14:04:27

标签: c# wpf xaml datepicker

我正在开发一个WPF应用程序,我在使用时输入了两个日期选择 可以选择日期,但我对这些输入有一些问题,因为用户可以在其上写下他们想要的任何内容,如下图所示

enter image description here

有没有办法掩盖这些输入?作为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>

2 个答案:

答案 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当日期不正确时,它会清除输入防止错误

enter image description here