簡體   English   中英

如何在WPF中實現TextBox.InputScope

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM