WPF文本框使用默认文本

WPF文本框使用默认文本,wpf,textbox,user-input,string-formatting,Wpf,Textbox,User Input,String Formatting,我有一个文本框,我希望我的用户以XX:XX:XX的格式输入时间值。我已经进行了验证,以确保他们以这种格式输入。但是,现在我想让冒号自动出现在那里。我希望它们在文本框中,当用户键入数字时,它们跳过冒号。有可能为文本框设置某种格式装饰器吗 编辑:我正在使用WPF 4。您可以使用WPF工具包中的屏蔽文本框 您可以使用wpf工具包中的屏蔽文本框 如果您想坚持使用vanilla WPF,您可以创建一个自定义控件并添加3个文本框 将冒号放在它们之间,处理keydown事件,将焦点从一个文本框传递到另一个文本

我有一个文本框,我希望我的用户以XX:XX:XX的格式输入时间值。我已经进行了验证,以确保他们以这种格式输入。但是,现在我想让冒号自动出现在那里。我希望它们在文本框中,当用户键入数字时,它们跳过冒号。有可能为文本框设置某种格式装饰器吗


编辑:我正在使用WPF 4。

您可以使用WPF工具包中的屏蔽文本框


您可以使用wpf工具包中的屏蔽文本框


如果您想坚持使用vanilla WPF,您可以创建一个自定义控件并添加3个文本框

将冒号放在它们之间,处理keydown事件,将焦点从一个文本框传递到另一个文本框,同时只接受数字


再次强调:使用工具包可能会减少工作量。

如果您想坚持使用vanilla WPF,您可以创建一个自定义控件并添加3个文本框

将冒号放在它们之间,处理keydown事件,将焦点从一个文本框传递到另一个文本框,同时只接受数字


再次强调:使用工具箱可能会减少工作量。

按照Erno的建议使用三个文本框可能是更好的解决方案,但您也可以使用
TextChanged
事件向文本中添加冒号(这可能会让用户感到困惑),下面是在第二个和第五个字符后插入冒号的代码:

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    TextBox tb = sender as TextBox;
    if (e.Changes.Count == 1)
    {
        if (e.Changes.ElementAt(0).AddedLength == 1 && (tb.Text.Length == 2 || tb.Text.Length == 5))
        {
            tb.Text += ":";
            tb.SelectionStart = tb.Text.Length;
        }
    }
}

按照Erno的建议使用三个文本框可能是更好的解决方案,但您也可以使用
TextChanged
事件向文本中添加冒号(这可能会让用户感到困惑),下面是在第二个和第五个字符后插入冒号的代码:

private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
    TextBox tb = sender as TextBox;
    if (e.Changes.Count == 1)
    {
        if (e.Changes.ElementAt(0).AddedLength == 1 && (tb.Text.Length == 2 || tb.Text.Length == 5))
        {
            tb.Text += ":";
            tb.SelectionStart = tb.Text.Length;
        }
    }
}

看起来不错,但如果可能的话,我更喜欢香草WPF。我使用的是WPF4。如果你不想使用整个工具包,尽管它是值得的,因为有一些很棒的控件,你可以访问源代码并取出我同意的@Tom Dudfield。里面有很多好东西。你不会发现WPF中烘焙的功能,你很可能会完全按照工具包的功能(从默认的文本框中派生出来,自己滚动)完成,但没有任何收获……看起来不错,但如果可能的话,我更愿意使用vanilla WPF。我使用的是WPF4。如果你不想使用整个工具包,尽管它是值得的,因为有一些很棒的控件,你可以访问源代码并取出我同意的@Tom Dudfield。里面有很多好东西。您不会发现WPF中烘焙的功能,您很可能会完全按照工具包的功能(从默认文本框派生并滚动自己的文本框)完成,但没有任何收获。。。