![](/img/trans.png)
[英]How to implement GetLineStartPosition for a WPF TextBox UI Control?
[英]How to implement TextBox.InputScope in WPF
我正在尋找一種實現文本框InputScope的方法,就像在Wp7中一樣,但是要使用經典WPF。
我要實現的是,將輸入限制為僅使用十進制數字。 我該如何實現?
<TextBox Text="{Binding Amount, Mode=TwoWay}" InputScope="Number"/>
InputScope是經典WPF的有效屬性,但可惜它似乎不起作用。
InputScope不會對輸入強制進行任何形式的驗證或限制。 這是對輸入處理器(例如,屏幕鍵盤,語音識別)的提示,它可以輸入控件中的數據類型。
僅在激活IME (如屏幕鍵盤)時使用此值。
即使在WP7中,InputScope也不限制可以在文本框中輸入的值。 如果可以安裝忽略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>
(在Google上找到的正則表達式字符串,我尚未檢查。)
也許:
<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。 用戶可以修改它:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.