如何在WPF中实现TextBox.InputScope

如何在WPF中实现TextBox.InputScope,wpf,textbox,inputscope,Wpf,Textbox,Inputscope,我正在寻找一种方法来实现文本框的InputScope,就像在Wp7中一样,但是使用经典的WPF 我想要实现的是,输入仅限于使用十进制数字。 我怎样才能做到这一点 <TextBox Text="{Binding Amount, Mode=TwoWay}" InputScope="Number"/> InputScope是经典WPF的一个有效属性,但遗憾的是它似乎不起作用。没有内置的方法来实现它。 您需要编写一些代码来实现所需的功能。 下面是一个您需要执行的示例:没有内置的方法来执

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

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

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


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>

我没有使用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>

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

此值仅在激活(如屏幕键盘)时使用

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

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


可以使用InputManager的事件来过滤使用InputScope的输入事件,但这可能不值得。InputScope不强制对输入进行任何类型的验证或限制。它是向输入处理器(如屏幕键盘、语音识别)提示可以在控件中输入的数据类型

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);
            }
        }
此值仅在激活(如屏幕键盘)时使用

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

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

使用InputManager的事件可以使用InputScope过滤输入事件,但这可能不值得

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);
            }
        }
messageWrite是一个文本框名称。它限制在A-F和0-9之间。用户可以修改它:)


messageWrite是一个文本框名称。它限制在A-F和0-9之间。用户可以修改它:)

Hi Alex。谢谢你的链接,但这不是我要搜索的。即使我需要编写一些代码,我也希望使用InputScope属性,该属性已定义为TextBox的有效WPF属性。InputScope是对输入处理器(如屏幕键盘)的提示,而不是限制输入的方法。不能使用InputScope限制键盘事件。谢谢你的链接,但这不是我要搜索的。即使我需要编写一些代码,我也希望使用InputScope属性,该属性已定义为TextBox的有效WPF属性。InputScope是对输入处理器(如屏幕键盘)的提示,而不是限制输入的方法。您不能使用InputScope限制键盘事件此链接有用吗?此链接有用吗?您知道如何使用预处理输入处理程序吗?如果您对此有一个可行的解决方案,我会奖励您50+的奖金。问题不是如何使用预处理输入,而是如何使用InputScope过滤输入。我不知道有什么内在的方法可以做到这一点。此问题的答案显示了如何从另一个事件创建输入事件,但您仍然无法筛选结果事件。@BitKFu您可以将此标记为答案,因为此答案最有用。您知道如何使用预处理输入处理程序吗?如果您对此有一个可行的解决方案,我会奖励您50+的奖金。问题不是如何使用预处理输入,而是如何使用InputScope过滤输入。我不知道有什么内在的方法可以做到这一点。此问题的答案显示了如何从另一个事件创建输入事件,但您仍然无法筛选结果事件。@BitKFu您可以将其标记为答案,因为此答案最有用。