0

我对 C# 和 WPF 还很陌生,但我正在尝试创建一个最多允许 14 个数字和 3 个句点的文本框,以及另一个只允许 5 个数字的文本框。我怎样才能做到这一点?由于某种原因,我没有运气研究过stackoverflow。我尝试了许多“解决方案”,但这些对我从来没有用过。

4

2 回答 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 回答