我试图让文本框只接受特定字符。
我的文本框绑定到以下内容:
private string _CompanyID;
public string CompanyID
{
get { return _CompanyID; }
set
{
_CompanyID = UniversalHelpers.sReturnCorrectColumnName(value);
OnPropertyChanged("CompanyID");
}
}
这是正在调用的函数:
public static string sReturnCorrectColumnName(string sInput)
{
if(!string.IsNullOrWhiteSpace(sInput))
return Regex.Replace(sInput, @"[^a-zA-Z]", string.Empty).ToUpper();
else
return sInput;
}
(我只允许 a-z 和 A-Z,没有其他)。
最后我的文本框看起来像这样:
<TextBox Text="{Binding ExcelBindings.CompanyID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
我不明白的是,即使我的模式设置为双向,该用户仍然可以编写他想要的任何内容。
我究竟做错了什么?
您应该在那里使用自定义 UI 元素,使用更改监听器等“经典”解决方案来限制视图端的输入。
例如,您可以创建一个简单的子类型TextBox
覆盖OnPreviewTextInput
方法。在那里,您可以决定何时应该进行某些输入,或者何时要阻止它。
例如,这是一个自定义文本框,仅采用 ASCII 字母表中的字符:
public class AlphabetTextBox : TextBox
{
private static readonly Regex regex = new Regex("^[a-zA-Z]+$");
protected override void OnPreviewTextInput(TextCompositionEventArgs e)
{
if (!regex.IsMatch(e.Text))
e.Handled = true;
base.OnPreviewTextInput(e);
}
}
当然,您也可以将正则表达式设置为文本框的属性,并允许人们从 XAML 中设置它。这样,您将获得一个可重复使用的组件,可用于各种应用程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)