Написал класс для создания маски для TextBox
public class Class1
{
private string mask;
public string Mask
{
get => mask;
set
{
mask = value;
MaskMethod();
}
}
private int maxLenght = 12;
public int MaxLenght
{
get => maxLenght;
set
{
maxLenght = value;
}
}
private void MaskMethod()
{
string s = Regex.Replace(Mask, @"[^0-9]", "");
if (s.Length == 0)
{
mask = "";
}
else if (s.Length == 1)
{
mask = Regex.Replace(s, @"(\d{1})", "$1___-______");
}
else if (s.Length == 2)
{
mask = Regex.Replace(s, @"(\d{2})", "$1__-______");
}
else if (s.Length == 3)
{
mask = Regex.Replace(s, @"(\d{3})", "$1_-______");
}
else if (s.Length == 4)
{
mask = Regex.Replace(s, @"(\d{4})", "$1-______");
}
else if (s.Length == 5)
{
mask = Regex.Replace(s, @"(\d{4})(\d{1})", "$1-$2_____");
}
else if (s.Length == 6)
{
mask = Regex.Replace(s, @"(\d{4})(\d{2})", "$1-$2____");
}
else if (s.Length == 7)
{
mask = Regex.Replace(s, @"(\d{4})(\d{3})", "$1-$2___");
}
else if (s.Length == 8)
{
mask = Regex.Replace(s, @"(\d{4})(\d{4})", "$1-$2__");
}
else if (s.Length == 9)
{
mask = Regex.Replace(s, @"(\d{4})(\d{5})", "$1-$2_");
}
else if (s.Length == 10)
{
mask = Regex.Replace(s, @"(\d{4})(\d{6})", "$1-$2");
maxLenght = 11;
}
}
}
В конструкторе MainWindow указал объект данного класса в качестве DataContext для TextBox-а
public MainWindow()
{
InitializeComponent();
Class1 cl = new Class1();
textBox1.DataContext = cl;
}
<TextBox
Width="170" Canvas.Left="27" Canvas.Top="27"
Text="{Binding Mask, UpdateSourceTrigger=PropertyChanged}"
Name="textBox1"
MaxLength="{Binding MaxLenght, Mode=OneWay}"
Tag="____-______">
</TextBox>
Однако когда маска заполняется полностью, то свойство MaxLenght не изменяется, согласно строке в классе Class1
else if (s.Length == 10)
{
mask = Regex.Replace(s, @"(\d{4})(\d{6})", "$1-$2");
maxLenght = 11;
}