首页 > 其他分享 >WPF TextBox not allowed illegal characters to be input and limit the text length in mvvm

WPF TextBox not allowed illegal characters to be input and limit the text length in mvvm

时间:2024-07-25 19:54:11浏览次数:7  
标签:tbx mvvm Windows illegal System length Text invalidCharsList using

//xaml
<Window x:Class="WpfApp224.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:behavior="http://schemas.microsoft.com/xaml/behaviors"
        xmlns:local="clr-namespace:WpfApp224"
        mc:Ignorable="d" WindowState="Maximized"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox BorderBrush="Black" BorderThickness="5" FontSize="30"  
                 Height="100"  VerticalAlignment="Top">
            <behavior:Interaction.Triggers>
                <behavior:EventTrigger EventName="PreviewTextInput">
                    <behavior:CallMethodAction MethodName="TextBox_PreviewTextInput" TargetObject="{Binding}"/>
                </behavior:EventTrigger>
                <behavior:EventTrigger EventName="TextChanged">
                    <behavior:CallMethodAction MethodName="TextBox_TextChanged" TargetObject="{Binding}"/>
                </behavior:EventTrigger>
            </behavior:Interaction.Triggers>
        </TextBox>
    </Grid>
</Window>





//cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp224
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    { 
        public MainWindow()
        {
            InitializeComponent(); 
            var vm = new MainVM();
            this.DataContext = vm;
        } 
    }

    public class MainVM
    {
        List<char> invalidCharsList { get; set; } = new List<char>();
        public MainVM()
        {
            invalidCharsList=new List<char>(System.IO.Path.GetInvalidFileNameChars());
        }

        public void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            var tbx = sender as TextBox;
            if (tbx != null && e!=null && !string.IsNullOrWhiteSpace(e.Text) && invalidCharsList!=null && invalidCharsList.Any())
            {
                if (e.Text.Any(x => invalidCharsList.Any(y => x == y)))
                {
                    MessageBox.Show($"Contains invalid chars:{e.Text}", "Contains invalid chars");
                    e.Handled = true; 
                }
                if (tbx.Text.Length > 10)
                {
                    MessageBox.Show("Max Length 10", "Max Length 10");
                    tbx.Text = tbx.Text.Substring(0, 10);
                    e.Handled = true;
                }
            }
        }

        public void TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            var tbx = sender as TextBox;
            if (tbx != null && !string.IsNullOrWhiteSpace(tbx.Text) && invalidCharsList != null && invalidCharsList.Any())
            {
                if (tbx.Text.Any(x => invalidCharsList.Any(y => x == y)))
                {
                    MessageBox.Show("Contains invalid chars:{e.Text}", "Contains invalid chars");
                    e.Handled = true; 
                }
                if (tbx.Text.Length > 10)
                {
                    MessageBox.Show("Max Length 10", "Max Length 10");
                    tbx.Text = tbx.Text.Substring(0, 10);
                    e.Handled = true;
                }
            }
        }

    }
}

 

 

 

 

 

标签:tbx,mvvm,Windows,illegal,System,length,Text,invalidCharsList,using
From: https://www.cnblogs.com/Fred1987/p/18324006

相关文章