2017-06-10 1 views
4

ユーザーは自分の年齢を入力する必要があるフォームを作成する必要があります。あなただけはできた数字を受け入れるようにEntryを制限するには...カンマまたは小数点の区切り記号を付けずにXamarin Forms Entry Numeric Keyboardを指定することはできますか?

+0

プラットフォーム間で動作するように独自のキーボードを作成する必要があります。しかし、ユーザーがそれを使用できないように入力するとすぐにコンマと小数点記号を消去するトリガーを簡単に追加することができます。あなたがそのコードを見たいと思ったら教えてください。 – hvaughan3

+0

...そうですね、そのコードを見れば助かります。私は非常に新しいxamarinコードです – Falco

答えて

4

<Entry 
     x:Name="AgeEntry" 
     VerticalOptions="FillAndExpand" 
     HorizontalOptions="FillAndExpand" 
     Keyboard="Numeric" 
    /> 

が、それは、私は数字だけを表示したいでも小数点文字を、示しています。私は、数字のキーボードを使用したいですBehaviorまたはTriggerを使用してください。

どちらも、入力したユーザーに反応します。だからあなたの使用のために、トリガーや行動を数字ではない文字を探して削除することができます。

行動については、この(私はSOすべてを上書き、それが動作しない場合は私に知らせて、それをコンパイルしようとしなかったことに注意してください)のようなもの:

using System.Linq; 
using Xamarin.Forms; 

namespace MyApp { 

    public class NumericValidationBehavior : Behavior<Entry> { 

     protected override void OnAttachedTo(Entry entry) { 
      entry.TextChanged += OnEntryTextChanged; 
      base.OnAttachedTo(entry); 
     } 

     protected override void OnDetachingFrom(Entry entry) { 
      entry.TextChanged -= OnEntryTextChanged; 
      base.OnDetachingFrom(entry); 
     } 

     private static void OnEntryTextChanged(object sender, TextChangedEventArgs args) 
     { 

      if(!string.IsNullOrWhiteSpace(args.NewTextValue)) 
      { 
       bool isValid = args.NewTextValue.ToCharArray().All(x=>char.IsDigit(x)); //Make sure all characters are numbers 

       ((Entry)sender).Text = isValid ? args.NewTextValue : args.NewTextValue.Remove(args.NewTextValue.Length - 1); 
      } 
     } 


    } 
} 

その後、あなたのXAMLで:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
     xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
     xmlns:local="clr-namespace:MyApp;assembly=MyApp"> <!-- Add the local namespace so it can be used below, change MyApp to your actual namespace --> 

    <Entry x:Name="AgeEntry" 
     VerticalOptions="FillAndExpand" 
     HorizontalOptions="FillAndExpand" 
     Keyboard="Numeric"> 
    <Entry.Behaviors> 
     <local:NumericValidationBehavior /> 
    </Entry.Behaviors> 
    </Entry> 

</ContentPage> 
+0

@Falcoちょうどそれをテストし、ロジックに問題がありました。前のバージョンを使ってみたら、もう一度コードをコピーしてみてください。 – hvaughan3

+0

こんにちは、ありがとう、あなたは非常に親切です、私はToCharArray()内のAll()を見つけることができません、それはコンパイルされません...とにかく私はどのようにbahaviorが動作し、あなたのコードでその行を変更しました。とにかく私はXamarinの新人です。そして、私はいくつかの考えが組み込まれていないのに驚いています...最高のことは、キーボードの "ポイント"を一切表示しないことでした。私はカスタムキーボードを作成する方法を勉強します... – Falco

+2

@Falco喜んでお手伝いします。 'All()'をコンパイルするには、クラスの先頭に 'using System.Linq;'を追加する必要があります(私のサンプルコードで追加しました)。私は、カスタムキーボードを作ることはかなり難しいかもしれないが、それは自分で多く学んだことではないと言うだろう。 – hvaughan3

関連する問題