【问题标题】:How to implement TextBox.InputScope in WPF如何在 WPF 中实现 TextBox.InputScope
【发布时间】:2012-06-07 23:02:24
【问题描述】:

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

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

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

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

【问题讨论】:

标签: wpf textbox inputscope


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 您知道如何使用 PreProcessInput 处理程序吗?如果你对此有一个可行的解决方案,我会奖励你 50+
  • 问题不在于如何使用 PreProcessInput,而在于如何使用 InputScope 过滤输入。我不知道这样做的内置方法。此问题social.msdn.microsoft.com/Forums/en-US/wpf/thread/… 中的答案显示了如何从另一个事件创建输入事件,但您仍然无法过滤结果事件。
  • @BitKFu 您可以将此标记为答案,因为此答案最有用。
【解决方案2】:

没有内置的方法可以做到这一点。 您需要编写一些代码来实现您正在寻找的东西。 这是您需要做的一个示例:WPF Maskable TextBox for Numeric Values

【讨论】:

  • 嗨,亚历克斯。感谢您的链接,但这不是我正在寻找的。即使我需要编写一些代码,我也想使用 InputScope 属性,该属性已经定义为 TextBox 的有效 WPF 属性。
  • InputScope 是对屏幕键盘等输入处理器的提示,而不是限制输入的方法。您不能使用 InputScope 限制键盘事件
【解决方案3】:

我没有使用过 InputScope,但是,从 MSDN 文档(herehereherehere)看来,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>

【讨论】:

    【解决方案4】:
    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。用户可以修改它:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多