如何在WPF文本框中限制数值粘贴

时间:2011-07-11 08:09:20

标签: c# wpf textbox

我的WPF文本框控件有问题。我想只输入数值。简单的解决方案是在isNumeric()事件中调用函数PreviewKeyDown,但问题是如果我将数字复制到剪贴板然后将其粘贴到文本框中,则不会调用检查代码。我该如何处理粘贴的数字?

3 个答案:

答案 0 :(得分:0)

请参阅DataObject.AddPastingHandler或查看this question,了解更广泛的问题解决方案。

答案 1 :(得分:0)

我使用自己的类,它是从TextBox派生的。在构造函数中,我使用ApplicationCommands.Paste创建一个CommandBinding()。在“CanPaste”方法中,我检查粘贴的文本(无法显示示例代码,因为它来自工作)。

纸浆

答案 2 :(得分:-1)

如果您正在使用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);
        }