Фильтрующие пасты в Сильверлайт 4 - PullRequest
4 голосов
/ 11 августа 2011

У меня есть TextBox, которые позволяют вставлять только числовые значения (фильтрация), но когда я вставляю скопированный текст, это разрешает любой вид символов. Как я могу предотвратить или отфильтровать текст перед вставкой?

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Вы можете сделать резервную копию вашего текста перед любым ручным вводом, а затем, если введенный ввод недействителен, восстановить предыдущий текст следующим образом:

        _backupText = string.Empty;
        doNotPasteTextBox.TextInputStart += (sender, e) =>
                                                {
                                                    int textParsed;
                                                    if(int.TryParse(e.Text,out textParsed))
                                                    {
                                                        _backupText = doNotPasteTextBox.Text.Insert(doNotPasteTextBox.SelectionStart, e.Text);
                                                    }else
                                                    {
                                                        e.Handled = true;
                                                    }
                                                };

        doNotPasteTextBox.TextChanged += (sender, e) =>
                                             {
                                                 int textParsed;
                                                 int selectionStart = doNotPasteTextBox.SelectionStart;
                                                 if(!int.TryParse(doNotPasteTextBox.Text, out textParsed))
                                                 {
                                                     doNotPasteTextBox.Text = _backupText;
                                                 }
                                                 doNotPasteTextBox.SelectionStart = selectionStart;
                                             };

Я бы не рекомендовал пытаться захватитьуправляющие клавиши или что-нибудь еще, потому что когда вы работаете на Mac или Linux, вы ввернуты.

Отрегулируйте мой образец и добавьте его в новый текстовый элемент управления, чтобы сделать его чище, но вы поняли.

1 голос
/ 11 августа 2011

Вы можете использовать Clipboard.GetText () , чтобы получить текст, вставленный в текстовое поле, но при этом появится сообщение, и пользователь должен предоставить приложению доступ к буферу обмена.*

Если для вас это не проблема, я бы использовал это.

...