如何在 WPF 中实现 TextBox.InputScope



我正在寻找一种方法来实现文本框的InputScope,就像在Wp7中一样,但使用经典的WPF。

我想要实现的是,输入仅限于使用十进制数。我怎样才能做到这一点?

<TextBox Text="{Binding Amount, Mode=TwoWay}" InputScope="Number"/>

InputScope 是经典 WPF 的有效属性,但遗憾的是它似乎不起作用。

InputScope 不会对输入强制进行任何类型的验证或限制。它是对输入处理器(例如屏幕键盘、语音识别)的提示,用于可以在控件中输入的数据类型。

仅当激活了 IME(如屏幕键盘)时,才使用此值。

即使在 WP7 中,输入范围也不会限制可以在文本框中输入的值。如果可以安装忽略 InputScope 的输入处理器,则仍可以输入不需要的字符。

如果要将文本输入限制为特定字符,则必须使用MaskedTextBox或拦截击键事件。代码也将更容易理解。

可以使用 InputManager 的 PreProcessInput 事件来使用 InputScope 筛选输入事件,但这可能不值得付出努力。

没有内置的方法可以做到这一点。您需要编写一些代码来实现所需的内容。下面是您需要执行的操作的示例: 数值的 WPF 可屏蔽文本框

我没有使用InputScope,但是,从MSDN文档(这里,这里,这里和这里)来看,WPF的输入范围需要更复杂的输入,例如

xmlns:swi应映射到System.Windows.Input

<TextBox>
    <TextBox.InputScope>
        <swi:InputScope RegularExpression="^(0|(-(((0|[1-9]d*).d+)|([1-9]d*))))$" />
    </TextBox.InputScope>
</TextBox>

(在谷歌上找到的正则表达式字符串,我还没有检查过。


或者也许:

<TextBox>
    <TextBox.InputScope>
        <swi:InputScopePhrase>
            <swi:InputScopePhrase.Names>Number</swi:InputScopePhrase>
        </swi:InputScopePhrase>
    </TextBox.InputScope>
</TextBox>
string txt = MessageWrite.Text;
        if (txt != "")
        {
            MessageWrite.Text = Regex.Replace(MessageWrite.Text, "[^a-f ^0-9]", "");
            if (txt != MessageWrite.Text)
            {
                MessageWrite.Select(MessageWrite.Text.Length, 0);
            }
        }

消息写入是一个文本框名称。它限制从 A-F 和 0-9。用户可以:)修改它

相关内容

  • 没有找到相关文章

最新更新