我对 C# 和 WPF 还很陌生,但我正在尝试创建一个最多允许 14 个数字和 3 个句点的文本框,以及另一个只允许 5 个数字的文本框。我怎样才能做到这一点?由于某种原因,我没有运气研究过stackoverflow。我尝试了许多“解决方案”,但这些对我从来没有用过。
问问题
1193 次
2 回答
2
我正在查看 nakiya 的解决方案,我可以看到您不明白该怎么做。我会做一个完整的例子,这样你就可以从中学到一些东西。看一看:
主窗口.xaml
<TextBox TextChanged="TextBoxBase_OnTextChanged" />
主窗口.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;
}
于 2013-03-05T08:55:44.743 回答
0
如果你愿意,你可以像这样设置绑定:
<TextBox Text="{Binding Field, UpdateSourceTrigger=PropertyChanged}" />
然后在Field
属性的设置器中执行您的要求:
public string Field
{
get { return _field; }
set
{
var val = MakeNumeric(value)
_field = value;
OnPropertyChanged("Field");
}
}
于 2013-03-04T23:27:37.873 回答