我对C#和WPF相当新,但我正在尝试创建一个只允许14个数字和3个句点的文本框,以及另一个只允许5个数字的文本框。我怎样才能做到这一点?由于某种原因,我研究了stackoverflow没有运气。我尝试了许多“解决方案”,但那些从未为我工作过。
答案 0 :(得分:2)
我正在看nakiya的解决方案,我可以看到你不明白该怎么做。我会做一个完整的例子,这样你就可以从中学到一些东西。看看:
MainWindow.xaml
<TextBox TextChanged="TextBoxBase_OnTextChanged" />
MainWindow.cs
private void TextBoxBase_OnTextChanged(object sender, TextChangedEventArgs e) {
var textBox = sender as TextBox;
if (textBox != null) {
string newValue = textBox.Text;
int changed = ValidateText(ref newValue);
int selectionStart = textBox.SelectionStart;
textBox.Text = newValue;
textBox.SelectionStart = selectionStart - changed;
}
}
private int ValidateText(ref string input) {
// If no value, return empty string
if (input == null) return 0;
int changed = 0;
// Go through input string and create new string that only contains digits and period
StringBuilder builder = new StringBuilder();
for (int index = 0; index < input.Length; index++) {
if (Char.IsDigit(input[index]) || input[index] == '.')
builder.Append(input[index]);
else changed++;
}
input = builder.ToString();
return changed;
}
答案 1 :(得分:0)
如果您愿意,可以像这样设置绑定:
<TextBox Text="{Binding Field, UpdateSourceTrigger=PropertyChanged}" />
然后在Field
属性的setter中强制执行您的要求:
public string Field
{
get { return _field; }
set
{
var val = MakeNumeric(value)
_field = value;
OnPropertyChanged("Field");
}
}