While taking input from the user, it's necessary that the user should type input in a correct datatype,i.e., if an integer value is required, then the user should type integer value and if a string is required, then they should type string. In WPF, I am going to show how we can bound user to do that, by masking textbox.

This is my XAML code.

  1. <Window x:Class="MaskedTextBoxInWPF.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Masked Text Box In WPF" Height="350" Width="525">
  2. <Grid>
  3. <TextBlock Height="23" HorizontalAlignment="Left" Margin="98,80,0,0" Name="textBlock1" Text="Enter Value:" VerticalAlignment="Top" />
  4. <TextBox Height="23" HorizontalAlignment="Left" Margin="184,80,0,0" Name="textBoxValue" PreviewTextInput="textBoxValue_PreviewTextInput" DataObject.Pasting="textBoxValue_Pasting" VerticalAlignment="Top" Width="120" />
  5. </Grid>
  6. </Window>

Here, I use 2 properties -

  • TextBoxPreviewTextInput="textBoxValue_PreviewTextInput"
  • DataObject.Pasting="textBoxValue_Pasting"

This is XAML.cs code,

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. namespace MaskedTextBoxInWPF {
  15. ///<summary>
  16. /// Interaction logic for MainWindow.xaml
  17. ///</summary>
  18. publicpartialclassMainWindow: Window {
  19. public MainWindow() {
  20. InitializeComponent();
  21. }
  22. privatevoid textBoxValue_PreviewTextInput(object sender, TextCompositionEventArgs e) {
  23. e.Handled = !TextBoxTextAllowed(e.Text);
  24. }
  25. privatevoid textBoxValue_Pasting(object sender, DataObjectPastingEventArgs e) {
  26. if (e.DataObject.GetDataPresent(typeof(String))) {
  27. String Text1 = (String) e.DataObject.GetData(typeof(String));
  28. if (!TextBoxTextAllowed(Text1)) e.CancelCommand();
  29. } else e.CancelCommand();
  30. }
  31. privateBoolean TextBoxTextAllowed(String Text2) {
  32. returnArray.TrueForAll < Char > (Text2.ToCharArray(), delegate(Char c) {
  33. returnChar.IsDigit(c) || Char.IsControl(c);
  34. });
  35. }
  36. }
  37. }

When we run the application, this is the output.

Masked TextBox In WPF
Image 1.

If a user tries to type string value in this textbox, then he/she can't type. It has the permission only to type an integer value.