我正在寻找一种方法来实现文本框的InputScope,就像在Wp7中做的那样,但使用经典的WPF。
我想要实现的是,输入被限制为只使用十进制数。我怎样才能做到这一点呢?
<TextBox Text="{Binding Amount, Mode=TwoWay}" InputScope="Number"/>对于经典的WPF来说,InputScope是一个有效的属性,但不幸的是,它似乎不起作用。
发布于 2012-06-12 16:15:57
InputScope不会强制对输入进行任何类型的验证或限制。它是对输入处理器的提示(例如,屏幕上的键盘、语音识别)可以在控件中输入的数据类型。
仅当激活IME (如屏幕上的键盘)时才使用此值。
即使在WP7中,InputScope也不限制可以在文本框中输入的值。如果您可以安装一个忽略InputScope的输入处理器,您仍然可以输入不需要的字符。
如果要将文本输入限制为特定字符,则必须使用MaskedTextBox或拦截击键事件。代码也会更容易理解。
可以使用InputManager的PreProcessInput事件通过InputScope过滤输入事件,但可能不值得这么做。
发布于 2012-06-04 03:37:04
没有内置的方法可以做到这一点。你需要写一些代码来实现你想要的东西。下面是你需要做的一个例子:WPF Maskable TextBox for Numeric Values
发布于 2012-06-08 07:49:05
然而,从MSDN文档(here、here、here和here )中我还没有使用过InputScope,它的输入范围似乎需要更复杂的输入。
应该将xmlns:swi映射到System.Windows.Input。
<TextBox>
<TextBox.InputScope>
<swi:InputScope RegularExpression="^(0|(-(((0|[1-9]\d*)\.\d+)|([1-9]\d*))))$" />
</TextBox.InputScope>
</TextBox>(在Google上找到Regex字符串,我还没有检查过它。)
或者:
<TextBox>
<TextBox.InputScope>
<swi:InputScopePhrase>
<swi:InputScopePhrase.Names>Number</swi:InputScopePhrase>
</swi:InputScopePhrase>
</TextBox.InputScope>
</TextBox>https://stackoverflow.com/questions/10871713
复制相似问题