XAML代码
cs代码
< TextBox Name="textBox1" DataObject.Pasting="textBox1_Pasting" PreviewKeyDown="textBox1_PreviewKeyDown" InputMethod.IsInputMethodEnabled="False" PreviewTextInput="textBox1_PreviewTextInput" / >
cs代码
private void textBox1_Pasting(object sender, DataObjectPastingEventArgs e)
{
if (e.DataObject.GetDataPresent(typeof(String)))
{
String txt = (String)e.DataObject.GetData(typeof(String));
if (!IsNumber(txt))
{
e.CancelCommand(); //取消复制操作
}
}
else
{
e.CancelCommand();
}
}
private void textBox1_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Space)
{ e.Handled = true; }
}
private void textBox1_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
if (!IsNumber(e.Text))
{
e.Handled = true;
}
else
{
e.Handled = false;
}
}
/// <summary>
/// 判断输入字符串是否是数字
/// </summary>
/// <param name="_string"></param>
/// <returns></returns>
public static bool IsNumber(string txt)
{
if (string.IsNullOrEmpty(txt))
{
return false;
}
foreach (char c in txt)
{
if (!char.IsDigit(c)) return false;
}
return true;
}
对三个事件的解释:
1)DataObject.Pasting,避免粘贴非数字型字符,[MSDN]此事件通过调用 CancelCommand旨在提供能够为应用程序检查 DataObject 的内容粘贴操作之前,更改,移除或添加数据格式或取消整个复制操作。
2)PreviewKeyDown事件,在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生),这里主要避免空格
3)PreviewTextInput事件,[msdn]PreviewTextInput 事件允许组件或应用程序侦听文本输入与设备无关的方式。 键盘是 PreviewTextInput主要方式;,但语音、手写和其他输入设备也会PreviewTextInput。其实白话就是,在输入要输入到文本框之前做一次检查,这里当然是检查最后输入进来的是不是数字。