2014-02-17 156 views
1

我試圖創建一個文本框控件並強制用戶在specyfic格式中只輸入數字。WPF和文本格式的文本框

如何在WPF中執行此操作?

我還沒有在TextBox類中找到任何屬性,例如「TextFormat」或「Format」。

我犯了這樣的文本框(而不是在可視化編輯器):

TextBox textBox = new TextBox(); 

我要像文本框行爲在MS Access形式,(用戶可以把只有數字在文本中的「000.0」格式例如)。

+0

http://stackoverflow.com/questions/3725189/wpf-textbox-binding-with-stringformat-0f2-dont-show-zeros – kenny

+0

@kenny我以編程方式創建控件,而不是在XAML中。我不知道如何使用鏈接中的信息來編程。 – Kamil

回答

0

根據您的說明,您希望限制用戶輸入爲帶有小數點的數字。 你也提到你正在編程創建TextBox。

使用TextBox.PreviewTextInput事件來確定字符的類型並驗證TextBox中的字符串,然後使用e.Handled在適當的位置取消用戶輸入。

這將這樣的伎倆:

public MainWindow() 
{ 
    InitializeComponent(); 

    TextBox textBox = new TextBox(); 
    textBox.PreviewTextInput += TextBox_PreviewTextInput; 
    this.SomeCanvas.Children.Add(textBox); 
} 

香餑餑,做驗證:

void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e) 
{ 
    // change this for more decimal places after the period 
    const int maxDecimalLength = 2; 

    // Let's first make sure the new letter is not illegal 
    char newChar = char.Parse(e.Text); 

    if (newChar != '.' && !Char.IsNumber(newChar)) 
    { 
     e.Handled = true; 
     return; 
    } 

    // combine TextBox current Text with the new character being added 
    // and split by the period 
    string text = (sender as TextBox).Text + e.Text; 
    string[] textParts = text.Split(new char[] { '.' }); 

    // If more than one period, the number is invalid 
    if (textParts.Length > 2) e.Handled = true; 

    // validate if period has more than two digits after it 
    if (textParts.Length == 2 && textParts[1].Length > maxDecimalLength) e.Handled = true; 
} 
+0

謝謝,但那不是我想要的。 – Kamil

+2

@Kamil:你想在XAML中做格式?更好地解釋你想要的東西......並意識到它將受到可能性的限制:)你所展示的只是實例化TextBox控件的一行代碼。真的沒有太多的路要走。 –

+0

我想要類似於MS Access窗體中的格式,(用戶只能在該文本框中輸入數字)。 – Kamil