在WPF中设置电话号码的格式文本框
我在WPF窗口中有一个DataGrid。如何在数据网格中以“(999)999-9999”格式显示电话号码字符串列 数据网格中的电话号码列使用CellTemplate中的TextBlock和CellEditingTemplate中的TextBox。电话号码以字符串形式存储,无格式设置,如“9995551234”在WPF中设置电话号码的格式文本框,wpf,Wpf,我在WPF窗口中有一个DataGrid。如何在数据网格中以“(999)999-9999”格式显示电话号码字符串列 数据网格中的电话号码列使用CellTemplate中的TextBlock和CellEditingTemplate中的TextBox。电话号码以字符串形式存储,无格式设置,如“9995551234” 是否可以将手机显示为:(999)555-1234,并将其编辑为(999)555-1234?在短时间的谷歌搜索后,我找到了这两个链接 第二个是德语 WPF–屏蔽文本框行为 屏蔽文本框 希
是否可以将手机显示为:(999)555-1234,并将其编辑为(999)555-1234?在短时间的谷歌搜索后,我找到了这两个链接 第二个是德语 WPF–屏蔽文本框行为 屏蔽文本框 希望这有帮助试着使用
Text=“{Binding PhoneNumber,StringFormat={}{0:(#######-######}”
编辑
如果您的PhoneNumber
属性的类型为string,那么您实际上无法使用StringFormat
对其进行格式化
在过去,当我想做类似的事情时,我公开了一个名为FormattedPhoneNumber
的属性,它返回格式化的电话号码以供显示,编辑框只绑定到普通的未格式化的PhoneNumber
public string FormattedPhoneNumber
{
get
{
if (PhoneNumber == null)
return string.Empty;
switch (PhoneNumber.Length)
{
case 7:
return Regex.Replace(PhoneNumber, @"(\d{3})(\d{4})", "$1-$2");
case 10:
return Regex.Replace(PhoneNumber, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
case 11:
return Regex.Replace(PhoneNumber, @"(\d{1})(\d{3})(\d{3})(\d{4})", "$1-$2-$3-$4");
default:
return PhoneNumber;
}
}
}
我想扩展Rachel已经做出的回应。如果电话号码是整数,则StringFormat可以正常工作。如果电话号码是一个字符串,我发现转换器非常方便。这样就不需要为类创建其他属性 以下是一个例子:
public class StringToPhoneConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return string.Empty;
//retrieve only numbers in case we are dealing with already formatted phone no
string phoneNo = value.ToString().Replace("(", string.Empty).Replace(")", string.Empty).Replace(" ", string.Empty).Replace("-", string.Empty);
switch (phoneNo.Length)
{
case 7:
return Regex.Replace(phoneNo, @"(\d{3})(\d{4})", "$1-$2");
case 10:
return Regex.Replace(phoneNo, @"(\d{3})(\d{3})(\d{4})", "($1) $2-$3");
case 11:
return Regex.Replace(phoneNo, @"(\d{1})(\d{3})(\d{3})(\d{4})", "$1-$2-$3-$4");
default:
return phoneNo;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
xaml:
为什么不直接将其放入模型中,并添加ToFormattedString()或其他绑定到的属性?你也可以使用转换器。我试过了,但手机显示为“9995551234”。它不使用StringFormat。这是我的数据网格专栏:@Jerry Oh我刚刚意识到电话号码是一个字符串,所以更新了我的答案。如果这对您不起作用,那么您可能需要查看建筑或找到自己的MaskedTextBox
来使用是的,这非常有效!我添加了一个分部类,并将FormattedPhoneNumber添加为公共字符串。因此,在我的DataGrid中,我在Celltemplate中使用FormattedPhoneNumber,在CellEditingTemplate中使用PhoneNumber。非常好,谢谢!
<TextBox Text="{Binding SelectedParticipant.PhoneNumber, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StringToPhoneConverter}}" />