我試圖創建一個文本框控件並強制用戶在specyfic格式中只輸入數字。WPF和文本格式的文本框
如何在WPF中執行此操作?
我還沒有在TextBox類中找到任何屬性,例如「TextFormat」或「Format」。
我犯了這樣的文本框(而不是在可視化編輯器):
TextBox textBox = new TextBox();
我要像文本框行爲在MS Access形式,(用戶可以把只有數字在文本中的「000.0」格式例如)。
我試圖創建一個文本框控件並強制用戶在specyfic格式中只輸入數字。WPF和文本格式的文本框
如何在WPF中執行此操作?
我還沒有在TextBox類中找到任何屬性,例如「TextFormat」或「Format」。
我犯了這樣的文本框(而不是在可視化編輯器):
TextBox textBox = new TextBox();
我要像文本框行爲在MS Access形式,(用戶可以把只有數字在文本中的「000.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;
}
考慮使用WPF內置的驗證技術。有關ValidationRule
類和此how-to的信息,請參閱此MSDN文檔。
你可能需要的是一個蒙面輸入。 WPF沒有一個,這樣你就可以實現它自己(通過使用validation,例如),或使用可用的第三方控件之一:
http://stackoverflow.com/questions/3725189/wpf-textbox-binding-with-stringformat-0f2-dont-show-zeros – kenny
@kenny我以編程方式創建控件,而不是在XAML中。我不知道如何使用鏈接中的信息來編程。 – Kamil