自定义允许接收字符的CustomizedTextBox控件

2012-2-5 20:35| 发布者: max| 评论: 2|原作者: max

在vs中添加一个新的类,在工程中右键,出现如下视图

1 (2).jpg


命名为CustomizedTextBox.cs

2.jpg


添加如下代码
  1. public class CustomizedTextBox:TextBox
  2.     {
  3.         private readonly List<Key> _defualtKeys = new List<Key>{
  4.             Key.NumPad0, Key.NumPad1, Key.NumPad2, // 默认只允许输入数字键和删除键
  5.             Key.NumPad3, Key.NumPad4, Key.NumPad5, // 注:在其它键盘上数字键可能为Key.D0等
  6.             Key.NumPad6, Key.NumPad7, Key.NumPad8, Key.NumPad9, Key.Back};

  7.         private List<Key> _listKeys; // 允许输入的键集合

  8.         public List<Key> ListKeys // 定义属性
  9.         {
  10.             get { return _listKeys; }
  11.             set { _listKeys = value; }
  12.         }

  13.         public CustomizedTextBox()
  14.         {
  15.             _listKeys = new List<Key>();
  16.             _listKeys = _defualtKeys;
  17.             this.InputScope = new InputScope();
  18.             this.InputScope.Names.Add(new InputScopeName{NameValue = InputScopeNameValue.TelephoneNumber});
  19.         }

  20.         public CustomizedTextBox(List<Key> listKeys)
  21.         {
  22.             _listKeys = new List<Key>();
  23.             _listKeys = listKeys;
  24.             this.InputScope = new InputScope();
  25.             this.InputScope.Names.Add(new InputScopeName { NameValue = InputScopeNameValue.TelephoneNumber });
  26.         }

  27.         protected override void OnKeyDown(KeyEventArgs e)
  28.         {
  29.             if (!_listKeys.Contains(e.Key))
  30.             {
  31.                 e.Handled = true; // 拦截事件,再允许这个行为被其它地方处理ª
  32.                                   // 即只让_listKeys集合里的键能够输入
  33.             }
  34.             base.OnKeyDown(e);   // 调用基类默认的操作
  35.         }
  36.     }
复制代码
定义好后我们如何使用呢?

1)        如上图添加命名空间xmlns: my="clr-namespace:UIControlSets"
2)        在xmal文件中添加如下代码
  1. <my:CustomizedTextBox Height="100" Margin="31,358,25,149" />
复制代码
如果用c#方式:
  1. List<Key> list = new List<Key> { Key.D0, Key.D1, Key.D2 }; // 允许输入的字符
  2.             CustomizedTextBox ctb = new CustomizedTextBox(list);
  3.             this.LayoutRoot.Children.Add(ctb);
复制代码
可自定义允许输入的字符

3.jpg






zsj20082008 2012-2-28 11:55
不知道楼主有没有在真机上面试验成功,我在模拟器上面可以现在,但是在真机上面就不起作用了。
wonderfulsense 2012-2-7 09:36
学习!

关于我们|手机版|Archiver|DEVDIV.COM ( 京ICP备07040843号 )  

GMT+8, 2012-5-19 16:07

Powered by DEVDIV.COM!

© 2010-2012 DEVDIV.COM Coummunity.

回顶部