C#WPF。在 DatePickere 中写入时如何自动添加点?

Posted

技术标签:

【中文标题】C#WPF。在 DatePickere 中写入时如何自动添加点?【英文标题】:C# Wpf. How to add dots automatically while writing in DatePickere? 【发布时间】:2018-03-10 01:04:29 【问题描述】:

正则表达式应在输入后检查和更改数据选择器文本。我正在为此使用 keyUp 事件。

private void DatePicker_KeyUp(object sender, RoutedEventArgs e)

    DatePicker dp = (sender as DatePicker);
    string text = dp.Text;
    if (Regex.IsMatch(text, @"^\d3"))
    
        dp.Text = Regex.Replace(text, @"(\d2)(\d)", "$1.$2");
    
    else if (Regex.IsMatch(text, @"^(\d2\.\d3)"))
    
        dp.Text = Regex.Replace(text, @"(\d2\.\d2)(\d)", "$1.$2");
    

但是 dp.Text 没有设置文本。有没有人知道如何将文本写入数据选择器或在写作时添加分隔点的其他方式?

【问题讨论】:

Changing the string format of the WPF DatePicker的可能重复 当您的正则表达式实际匹配时,您的事件处理程序会设置 Text。那么您的实际问题是什么? 在输入 'ddm' 事件处理程序后应将 datapicker 的文本设置为 ("dd.m"),但这是无效字符串,因此将其设置为空 【参考方案1】:

您可以尝试处理PreviewTextInput 事件并设置DatePickerTextBoxText 属性:

private void DatePicker_PreviewTextInput(object sender, TextCompositionEventArgs e)

    DatePicker dp = (sender as DatePicker);
    string text = dp.Text + e.Text;
    if (Regex.IsMatch(text, @"^\d3"))
    
        e.Handled = true;
        DatePickerTextBox tb = dp.Template.FindName("PART_TextBox", dp) as DatePickerTextBox;
        tb.Text = Regex.Replace(text, @"(\d2)(\d)", "$1.$2");
        tb.CaretIndex = tb.Text.Length;
    
    else if (Regex.IsMatch(text, @"^(\d2\.\d3)"))
    
        e.Handled = true;
        DatePickerTextBox tb = dp.Template.FindName("PART_TextBox", dp) as DatePickerTextBox;
        tb.Text = Regex.Replace(text, @"(\d2\.\d2)(\d)", "$1.$2");
        tb.CaretIndex = tb.Text.Length;
    

【讨论】:

以上是关于C#WPF。在 DatePickere 中写入时如何自动添加点?的主要内容,如果未能解决你的问题,请参考以下文章

从 Spark 写入镶木地板时如何处理空值

写入期望类型不是浮点数的数据库时如何处理 NaN 值?

c#的button加快捷键时如何用下划线显示字母

C# WPF 生成图像访问被拒绝

C#,WPF使用word模板导出word文档

WPF 不同DPI下,窗口大小的处理