W programowaniu część dziesiętną w liczbach ułamkowych oddziela się za pomocą kropki. W przypadku projektu wpf, operator ten może być automatyczie zmieniony na przecinek w zależności od kraju i ustawień windowsa. W wielu przypadkach warto użyć argumentu CultureInfo, aby te zmiany nie wypływały na sposób wpisywaia danych. Dodatkowo warto zamieniać przecinki na kropki, aby użytkownik miał możliwość stosowania obu operatorów.
string numInput = "2";
if(double.TryParse(numInput.Replace(',', '.'), CultureInfo.InvariantCulture, out double number)){
return number;
}
Ograniczenie wpisywanych danych do textbox
//xaml
<TextBox PreviewTextInput="TextBox_OnPreviewTextInput"/>
//xaml.cs
private void TextBox_OnPreviewTextInput(object sender, TextCompositionEventArgs e)
{
var textBox = sender as TextBox;
// Use SelectionStart property to find the caret position.
// Insert the previewed text into the existing text in the textbox.
var fullText = textBox.Text.Insert(textBox.SelectionStart, e.Text);
double val;
// If parsing is successful, set Handled to false
e.Handled = !double.TryParse(fullText,
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign,
CultureInfo.InvariantCulture,
out val);
}
Filtrowanie danych za pomocą Regex
// xaml
<TextBox Name="NumberTextBox" PreviewTextInput="NumberValidationTextBox"/>
//xaml.cs
// use [^a-zA-Z] for alphabet only
private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9],");
e.Handled = regex.IsMatch(e.Text);
}