私はこれを持っています:
<TextBox x:Name="txbPhone" Text="+420"
InputScope="TelephoneNumber" Margin="9,0,9,0"/>
今、私はユーザーに自分の電話番号を次のように書いてもらいたい:
ユーザーが TextBox の値を変更するときにコードに手動でスペースを追加して作成することを考えている+420123456789
ように、TextBox に表示したい。+420 123 456 789
次に、それを使用すると、文字列内のすべてのスペースを削除します。しかし、それは少し「汚い」解決策だと思います。これにテンプレートを設定する方法はありますか? ありがとう
編集: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 呼び出し Converter で文字を変更するたびに?
私のビューモデルクラス:
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));
}
}
}
}