我有这个:
<TextBox x:Name="txbPhone" Text="+420"
InputScope="TelephoneNumber" Margin="9,0,9,0"/>
现在我想让用户写下他的电话号码,比如:
+420123456789
我想在 TextBox 中显示它,就像+420 123 456 789
我想在用户更改 TextBox 的值时通过在代码中手动添加空格来创建它一样。然后当我使用它时,我只需删除字符串中的所有空格。但我认为这是一个“肮脏”的解决方案。有没有办法为此设置一些模板?谢谢
编辑:
我创建转换器作为评论中的提及Frederik Winstrup Johansen
。所以我创建了我的类(它需要向 ConvertBack 方法添加代码):
public class PhoneNumberConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var str = (string)value;
string result;
if (str[0] == '+')
result = String.Format("{0:+### ### ### ###}", System.Convert.ToInt64(value));
else
result = String.Format("{0:### ### ### ###}", (Int64)value);
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value;
}
}
并将我的 TextBox 更改为:
<TextBox x:Name="txbPhone" Text="{Binding Path=Phone, Converter={StaticResource phoneNumberConverter}, Mode=TwoWay}"
InputScope="TelephoneNumber" Margin="9,0,9,0" TextChanged="txbPhone_TextChanged"/>
这是我的绑定:
viewModel = new PhonePageViewModel();
viewModel.Phone = "+420123456";
this.DataContext = viewModel;
转换器正在工作,但当我添加一些数字时它不会改变文本。不再调用 Convert 方法。我怎样才能做到这一点?每次我在 TextBox 调用转换器中更改字母时?
我的视图模型类:
namespace SpeedCarsWP.ViewModels
{
public class PhonePageViewModel : INotifyPropertyChanged
{
private string phone;
public event PropertyChangedEventHandler PropertyChanged;
public string Phone
{
get { return phone; }
set
{
phone = value;
OnPropertyChanged("Phone");
}
}
public PhonePageViewModel()
{
}
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}