Xamarin.formsのマスクされたエントリコントロール。 xx:xx(例:01:00、25:98など)の形式で値を追加することを許可する入力フィールドを持っていたいと思います。キーボードプロパティを数値に設定しようとしましたが、含まれています:
マスクされたエントリコントロールXamarin.forms
どうすればいいですか?私はすべてのプラットフォームをターゲットにしているので、すべてのプラットフォームで動作するはずです。
Xamarin.formsのマスクされたエントリコントロール。 xx:xx(例:01:00、25:98など)の形式で値を追加することを許可する入力フィールドを持っていたいと思います。キーボードプロパティを数値に設定しようとしましたが、含まれています:
マスクされたエントリコントロールXamarin.forms
どうすればいいですか?私はすべてのプラットフォームをターゲットにしているので、すべてのプラットフォームで動作するはずです。
あなたが入力した文字に関係なく、それらのコントロールだけを持つ特別なキーボードが必要なのでしょうか?後者が大丈夫なら、あなたのエントリーに振る舞いを付けることをお勧めします。
以下のコードでは、ユーザーが任意のものを入力できるようになりますが、入力する内容が数字またはコロンでない場合は、エントリに表示されません。何らかのエラーメッセージを表示することもできますあなたが望むならば。
/// <summary>
/// Will validate that the text entered into an Entry is a valid number string (allowing: numbers and colons).
/// </summary>
public class IntColonValidationBehavior : Behavior<Entry> {
public static IntColonValidationBehavior Instance = new IntColonValidationBehavior();
/// <summary>
/// Attaches when the page is first created.
/// </summary>
protected override void OnAttachedTo(Entry entry) {
entry.TextChanged += OnEntryTextChanged;
base.OnAttachedTo(entry);
}
/// <summary>
/// Detaches when the page is destroyed.
/// </summary>
protected override void OnDetachingFrom(Entry entry) {
entry.TextChanged -= OnEntryTextChanged;
base.OnDetachingFrom(entry);
}
private void OnEntryTextChanged(object sender, TextChangedEventArgs args) {
if(!string.IsNullOrWhiteSpace(args.NewTextValue)) {
int result;
string valueWithoutColon = args.NewTextValue.Replace(":", string.Empty);
bool isValid = int.TryParse(valueWithoutColon, out result);
((Entry)sender).Text = isValid ? args.NewTextValue : args.NewTextValue.Remove(args.NewTextValue.Length - 1);
}
}
}
次に、あなたのエントリがそうのようになります。
<Entry Placeholder="Enter an int or a colon">
<Entry.Behaviors>
<local:IntColonValidationBehavior.Instance />
</Entry.Behaviors>
</Entry>
-OR-
Entry entry = new Entry { Placeholder = "Enter an int or a colon" };
entry.Behaviors.Add (IntColonValidationBehavior.Instance);
*編集:
多分これでstring.IsNullOrEmpty
if
文を置き換える(いません実際にテストされましたが、これを調整してあなたのために動作させることができます):
if(!string.IsNullOrWhiteSpace(args.NewTextValue)) {
int result;
string[] splitValue = args.NewTextValue.Split(new [] { ":" }, StringSplitOptions.RemoveEmptyEntries);
foreach(string value in splitValue) {
if(value.Length > 2) {
((Entry)sender).Text = args.NewTextValue.Remove(args.NewTextValue.Length - 1);
return;
}
bool isValid = int.TryParse(args.NewTextValue, out result);
if(!isValid) {
((Entry)sender).Text = args.NewTextValue.Remove(args.NewTextValue.Length - 1);
return;
}
}
((Entry)sender).Text = args.NewTextValue;
}
私が編集を参照してください@Arti XAML – Arti
に精通していないのC#を使用しています。 – hvaughan3
すばやい応答をありがとうが、私はこのような入力を許可したいと思います:xx:xx:xx xx-> number – Arti