Как ограничить вставку числовых значений в текстовое поле WPF - PullRequest
0 голосов
/ 11 июля 2011

У меня проблема с элементом управления текстовым полем WPF.Я хочу ввести в него только числовые значения.Простое решение - вызвать функцию isNumeric() в ее событии PreviewKeyDown, но проблема в том, что если я скопирую число в буфер обмена, а затем вставлю его в текстовое поле, код проверки не будет вызван.Как я могу обрабатывать вставленные номера?

Ответы [ 3 ]

0 голосов
/ 11 июля 2011

См. DataObject.AddPastingHandler или см. этот вопрос для более обобщенного решения вашей проблемы.

0 голосов
/ 11 июля 2011

Я использую собственный класс, производный от TextBox. В конструкторе я делаю CommandBinding () с ApplicationCommands.Paste. В методе «CanPaste» я проверяю вставленный текст (не могу показать пример кода, так как он с работы).

мякоть

0 голосов
/ 11 июля 2011

если вы используете cinch, просто используйте прикрепленное поведение из этого превосходного фреймворка.но если нет, вы можете быть вдохновлены этой ссылкой, где он (автор cinch) решает эту проблему с помощью прикрепленного поведения: http://www.codeproject.com/KB/WPF/CinchII.aspx#NumericAtt

Редактировать: магия лежит здесь, где он "отключает" вставку

        TextBox tb = sender as TextBox;
        if (tb == null)
            return;

        tb.PreviewTextInput -= tbb_PreviewTextInput;
        DataObject.RemovePastingHandler(tb, OnClipboardPaste);

        bool b = ((e.NewValue != null && e.NewValue.GetType() == typeof(bool))) ?
            (bool)e.NewValue : false;
        if (b)
        {
            tb.PreviewTextInput += tbb_PreviewTextInput;
            DataObject.AddPastingHandler(tb, OnClipboardPaste);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...