我试图使文本框仅接受特定字符。
我的文本框绑定到以下内容:
private string _CompanyID;
public string CompanyID
{
get { return _CompanyID; }
set
{
_CompanyID = UniversalHelpers.sReturnCorrectColumnName(value);
OnPropertyChanged("CompanyID");
}
}
Run Code Online (Sandbox Code Playgroud)
这是被调用的函数:
public static string sReturnCorrectColumnName(string sInput)
{
if(!string.IsNullOrWhiteSpace(sInput))
return Regex.Replace(sInput, @"[^a-zA-Z]", string.Empty).ToUpper();
else
return sInput;
}
Run Code Online (Sandbox Code Playgroud)
(我只允许使用AZ&AZ,没有其他内容)。
最后,我的TextBox看起来像这样:
<TextBox Text="{Binding ExcelBindings.CompanyID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
我不明白的是,即使我的“模式”设置为“双向”,该用户仍然可以写他想要的任何内容。
我究竟做错了什么?
您应该在此处使用自定义UI元素,以使用“经典”解决方案(如更改侦听器)在视图侧限制输入。
例如,您可以创建一个TextBox覆盖该OnPreviewTextInput方法的简单子类型。在那里,您可以决定何时应进行某些输入或何时要阻止输入。
例如,这是一个自定义TextBox,仅接受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);
}
}
Run Code Online (Sandbox Code Playgroud)
当然,您也可以将正则表达式设为文本框的属性,并允许人们从XAML进行设置。这样,您将获得一个非常可重用的组件,可以将其用于各种应用程序。
| 归档时间: |
|
| 查看次数: |
6292 次 |
| 最近记录: |