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