在 WPF 中为电话号码设置文本框格式
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/8085274/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Format TextBox for phone number in WPF
提问by Jerry
I have a DataGrid in a WPF window. How can I display a phone number string column in the DataGrid in a format of "(999)999-9999"?
我在 WPF 窗口中有一个 DataGrid。如何在DataGrid中以“(999)999-9999”格式显示电话号码字符串列?
The Phone number column in the DataGrid uses a TextBlock in the CellTemplate and a TextBox in the CellEditingTemplate. The phone number is stored as a string with no formating such as "9995551234".
DataGrid 中的电话号码列使用 CellTemplate 中的 TextBlock 和 CellEditingTemplate 中的 TextBox。电话号码存储为没有格式的字符串,例如“9995551234”。
Is it possible to display the phone as:(999)555-1234 and edit it as (999)555-1234?
是否可以将电话显示为:(999)555-1234 并将其编辑为(999)555-1234?
回答by Rachel
Try using Text="{Binding PhoneNumber, StringFormat={}{0:(###)###-####}}"
尝试使用 Text="{Binding PhoneNumber, StringFormat={}{0:(###)###-####}}"
Edit
编辑
If your PhoneNumber
property is of type string, then there's not really a lot you can do with StringFormat
to format it.
如果您的PhoneNumber
属性是字符串类型,那么您实际上无法对其StringFormat
进行格式化。
In the past when I've wanted to do something like this, I expose a property called FormattedPhoneNumber
which returns the formatted phone number for display purposes, and the edit box just binds to plain old unformatted PhoneNumber
过去,当我想做这样的事情时,我公开了一个名为的属性,该属性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})", "-");
case 10:
return Regex.Replace(PhoneNumber, @"(\d{3})(\d{3})(\d{4})", "() -");
case 11:
return Regex.Replace(PhoneNumber, @"(\d{1})(\d{3})(\d{3})(\d{4})", "---");
default:
return PhoneNumber;
}
}
}
回答by lucas
I would like to extend what already Rachel has responded. If a phone number is an integer, StringFormat would work just fine. In case a phone number is a string, I found Converter to be quite handy. This removes the need to create additional property for a class.
我想扩展雷切尔已经回应的内容。如果电话号码是整数,StringFormat 就可以正常工作。如果电话号码是字符串,我发现 Converter 非常方便。这消除了为类创建附加属性的需要。
Here is an example:
下面是一个例子:
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})", "-");
case 10:
return Regex.Replace(phoneNo, @"(\d{3})(\d{3})(\d{4})", "() -");
case 11:
return Regex.Replace(phoneNo, @"(\d{1})(\d{3})(\d{3})(\d{4})", "---");
default:
return phoneNo;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return value;
}
}
xaml:
xml:
<TextBox Text="{Binding SelectedParticipant.PhoneNumber, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource StringToPhoneConverter}}" />
回答by punker76
after a short google search i found this two links the second one is in german
经过短暂的谷歌搜索后,我发现这两个链接第二个是德语
WPF – Masked Textbox Behavior http://marlongrech.wordpress.com/2007/10/28/masked-textbox/
WPF - 蒙版文本框行为 http://marlongrech.wordpress.com/2007/10/28/masked-textbox/
Masked TextBox http://blindmeis.wordpress.com/2010/06/01/wpf-masked-textbox-behavior/
蒙面文本框 http://blindmeis.wordpress.com/2010/06/01/wpf-masked-textbox-behavior/
hope this helps
希望这可以帮助