我正在寻找一种方法来实现文本框的 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 不强制对输入进行任何类型的验证或限制。它是对可以在控件中输入的数据类型的输入处理器(例如屏幕键盘、语音识别)的提示。
此值仅在激活IME(如屏幕键盘)时使用。
即使在 WP7 中,InputScope 也不限制可以在文本框中输入的值。如果您可以安装忽略 InputScope 的输入处理器,您仍然可以输入不需要的字符。
如果要将文本输入限制为特定字符,则必须使用MaskedTextBox或拦截击键事件。代码也将更容易理解。
可以使用 InputManager 的PreProcessInput事件来过滤使用 InputScope 的输入事件,但这可能不值得。
没有内置的方法可以做到这一点。您需要编写一些代码来实现您正在寻找的东西。这是您需要做的一个示例:WPF Maskable TextBox for Numeric Values
我没有使用过 InputScope,但是,从 MSDN 文档(here、here、here和here)看来,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);
}
}
messageWrite 是一个文本框名称。它限制从 AF 和 0-9。用户可以修改它:)