我想为TextBox创建Style,以便它只接受数字而不接受任何字符或特殊符号。
目前我在后面的代码(在C#中)的帮助下这样做:
Regex regex = new Regex("[^0-9]+");
e.Handled = regex.IsMatch(e.Text);
是否可以制作XAML样式来处理这种情况?
答案 0 :(得分:0)
仅使用XAML是不可能的。根据我的经验,最好的办法是从TextBox派生,向任何可以输入文本的东西添加处理程序,然后在文本进入时验证文本。要么通过处理事件来拒绝更改,要么通过让路由接受它事件传播。
一般基类如下:
public abstract class RestrictedTextBox : TextBox
{
protected RestrictedTextBox()
{
PreviewTextInput += RestrictedTextBox_PreviewTextInput;
}
protected abstract bool IsValid(string proposed);
private void RestrictedTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
string proposed = GetProposedText(e.Text);
if (!IsValid(proposed))
e.Handled = true;
}
private string GetProposedText(string newText)
{
var text = this.Text;
if (SelectionStart != -1)
text.Remove(this.SelectionStart, this.SelectionLength);
return text.Insert(this.CaretIndex, newText);
}
}
要为DoubleTextBox创建一个具体的实例,您可以轻松地执行:
public class DoubleTextBox : RestrictedTextBox
{
protected override bool IsValid(string proposed)
{
double throwAwayDouble;
return double.TryParse(proposed, out throwAwayDouble);
}
}
这只允许您输入成功解析为double的文本。我将留给你处理keydown事件(对于空格键)和粘贴事件