2016-05-04 23 views
1

Xamarin.formsのマスクされたエントリコントロール。 xx:xx(例:01:00、25:98など)の形式で値を追加することを許可する入力フィールドを持っていたいと思います。キーボードプロパティを数値に設定しようとしましたが、含まれています:マスクされたエントリコントロールXamarin.forms

どうすればいいですか?私はすべてのプラットフォームをターゲットにしているので、すべてのプラットフォームで動作するはずです。

答えて

1

あなたが入力した文字に関係なく、それらのコントロールだけを持つ特別なキーボードが必要なのでしょうか?後者が大丈夫なら、あなたのエントリーに振る舞いを付けることをお勧めします。

以下のコードでは、ユーザーが任意のものを入力できるようになりますが、入力する内容が数字またはコロンでない場合は、エントリに表示されません。何らかのエラーメッセージを表示することもできますあなたが望むならば。

/// <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.IsNullOrEmptyif文を置き換える(いません実際にテストされましたが、これを調整してあなたのために動作させることができます):

 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; 
     } 
+0

私が編集を参照してください@Arti XAML – Arti

+0

に精通していないのC#を使用しています。 – hvaughan3

+0

すばやい応答をありがとうが、私はこのような入力を許可したいと思います:xx:xx:xx xx-> number – Arti

関連する問題